В проекте веб-установки не удается установить сайт динамических данных: "Установщик был прерван"

Последний этап установки завершается с этим сообщением:

Установка не завершена

Программа установки была прервана до установки [проекта]. Вам нужно перезапустить установщик, чтобы повторить попытку.

Бег 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, я хотел бы услышать это.

Другие вопросы по тегам