В проекте веб-установки не удается установить сайт динамических данных: "Установщик был прерван"
Последний этап установки завершается с этим сообщением:
Установка не завершена
Программа установки была прервана до установки [проекта]. Вам нужно перезапустить установщик, чтобы повторить попытку.
Бег msiexec /i installer.msi /l*vx setup.log
показывает следующие записи в журнале установки:
ИНФОРМАЦИЯ: [...] [ApplyWebFolderProperties]: получение токена свойства веб-папки... ИНФОРМАЦИЯ: [...] [ApplyWebFolderProperties]: токен является '/LM/W3SVC/1/ROOT/ProjectDir/DynamicData/Filters'. ИНФОРМАЦИЯ: [...] [ApplyWebFolderProperties]: получение METADATA_HANDLE для каталога '/LM/W3SVC/1/ROOT/ProjectDir/DynamicData/Filters'. ОШИБКА: [...] [ApplyWebFolderProperties]: СБОЙ: -2147024893 ОШИБКА: [...] [ApplyWebFolderProperties]: СБОЙ: -2147024893 ОШИБКА: [...] [ApplyWebFolderProperties]: пользовательское действие не выполнено с кодом: "3" ОШИБКА: [...] [ApplyWebFolderProperties]: пользовательское действие не выполнено с кодом: "3" ИНФОРМАЦИЯ: [...] [ApplyWebFolderProperties]: пользовательское действие завершено с кодом возврата: '3'
У того же веб-приложения раньше не было проблем с установкой веб-проекта. Проблема началась после обновления веб-приложения с.NET 3.5 SP1 до.NET 4.0.
1 ответ
Эта запись в блоге указывает на проблему:
Что заставило меня задуматься, у меня есть подпапка с именем фильтры. Ничего другого не изменив, кроме переименования подпапки фильтров, чтобы она закончилась правильно. Я предполагаю, что у вас могут быть такие же проблемы с папками с именами apppools, info или 1.
(Акцент мой)
К сожалению, Filters - это жестко заданное имя папки в Dynamic Data. Если вы посмотрите на FilterFactory, то, похоже, не существует способа переопределить это значение, так как свойство FilterFactory в MetaModel не помечено как виртуальное. Если мы не можем изменить имя папки, тогда мы должны взглянуть на исправление установщика...
Ошибка установщика вызывается пользовательским действием ApplyWebFolderProperties. Это действие не встроено в установщик Windows - оно добавлено проектом веб-установки. Это полезно, потому что это означает, что мы можем удалить его с помощью WiRunSQL.vbs:
cscript WiRunSQL.vbs installer.msi "DELETE FROM CustomAction WHERE Action='WEBCA_ApplyWebFolderProperties'"
Обратите внимание, что фактическое имя ApplyWebFolderProperties WEBCA_ApplyWebFolderProperties
, Видя, как действие нигде не документировано, будьте бдительны. Это не кажется слишком важным, хотя.
Чтобы автоматизировать обходной путь, вы можете добавить команду в PostBuildEvent проекта установки следующим образом:
cscript.exe "$(ProjectDir)..\WiRunSQL.vbs" "$(BuiltOuputPath)" "DELETE FROM CustomAction WHERE Action='WEBCA_ApplyWebFolderProperties'"
Если кто-нибудь знает лучший способ установить папку с именем Filters, я хотел бы услышать это.