如何创建一个不安装文件的MSI包,只使用Wix执行一些命令

时间:2010-05-26 17:36:34

标签: wix windows-installer

我正在尝试创建一个使用AppCmd应用程序配置IIS7的MSI包。它只需要执行一些调用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 个答案:

答案 0 :(得分:2)

解决方案是添加一个空组件:

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

下一步是在功能中包含该空组件:

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

添加这两位后,命令被正确调用。