我正在尝试创建一个使用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
有谁能告诉我我做错了什么?谢谢!
答案 0 :(得分:2)
解决方案是添加一个空组件:
<Directory Id="TARGETDIR" Name="SourceDir">
<Component Id="EmptyComponent" Guid="*" />
</Directory>
下一步是在功能中包含该空组件:
<Feature Id="Feature" Title="Feature" Level="1">
<ComponentRef Id="EmptyComponent" />
</Feature>
添加这两位后,命令被正确调用。