Как создать пакет MSI, который не устанавливает файлы и выполняет только некоторые команды, используя Wix - PullRequest
2 голосов
/ 26 мая 2010

Я пытаюсь создать пакет MSI, который использует приложение AppCmd ​​для настройки IIS7. Нужно только выполнить некоторые команды, которые вызывают AppCmd. Некоторые команды должны вызываться при установке, другие команды должны вызываться при удалении.

Вот что у меня сейчас:

У меня есть свойство, которое указывает на AppCmd:

<Property Id="APPCMD" Value="C:\Windows\system32\inetsrv\appcmd.exe" />

У меня есть пользовательские действия:

<CustomAction Id="UnlockHandlerSection" Return="check" Property="APPCMD" ExeCommand="unlock config /section:system.webServer/handlers" />

У меня есть пользовательские элементы, которые вызывают действия:

<InstallExecuteSequence>
    <Custom Action="UnlockHandlerSection" After="InstallFiles">NOT Installed AND NOT PATCH</Custom>
<InstallExecuteSequence>

Проблема в том, что команды не вызываются, когда я пытаюсь установить получившийся пакет MSI. Если я регистрирую установку, сам журнал не содержит много информации. Я не хочу публиковать все это, но это заканчивается следующим:

MSI (c) (50:34) [12:35:47:703]: Product: Server Configuration 1.0.0 -- Installation failed.
MSI (c) (50:34) [12:35:47:703]: Windows Installer installed the product. Product Name: Server Configuration 1.0.0. Product Version: 1.0.0. Product Language: 1033. Installation success or error status: 1603.

Кроме того, непосредственно перед тем, как инициализируется мое свойство APPCMD, это то, что печатается (правильные возвращаемые значения здесь):

Action ended 12:35:47: ExecuteAction. Return value 3.
Action ended 12:35:47: INSTALL. Return value 3.
Property(C): APPCMD = C:\Windows\system32\inetsrv\appcmd.exe

Может ли кто-нибудь сообщить мне, что я делаю неправильно? Спасибо!

1 Ответ

2 голосов
/ 02 июня 2010

Решением было добавить пустой компонент:

<Directory Id="TARGETDIR" Name="SourceDir">
    <Component Id="EmptyComponent" Guid="*" />
</Directory>

Следующим шагом было включение этого пустого компонента в функцию:

<Feature Id="Feature" Title="Feature" Level="1">
    <ComponentRef Id="EmptyComponent" />
</Feature>

После добавления этих двух битов команды вызываются правильно.

...