在安装软件之前,我必须检查某些 Windows 功能是否已启用。
我可以使用 dism 命令行工具检查或安装它。
我创建了一个自定义操作来执行此操作,但是有没有办法以“WIX 本机方式”执行此操作?
<Property Id="dism" Value="dism.exe" />
<CustomAction Id="InstallMSMQContainer" Property="dism" ExeCommand=" /online /enable-feature /featurename:MSMQ-Container /featurename:MSMQ-Server /featurename:MSMQ-ADIntegration" Return="check" Impersonate="yes" Execute="oncePerProcess"/>
<InstallUISequence>
<Custom Action="InstallMSMQContainer" After="CostFinalize" Overridable="yes">NOT Installed</Custom>
</InstallUISequence>
问题是命令启动命令提示符,这对于最终用户来说非常难看。
我怎样才能让它变得更好?我不知道是否需要引导程序来执行此操作(例如安装 .NET Framework)。
有没有扩展来管理这些事情?
我现在使用的是 WIX 3.7。
大卫·加德纳的回答暗示了我的案例的正确解决方案。无需创建您自己的自定义操作。以下是针对 64 位 Windows 安装的操作方法:
首先判断是否安装了MSMQ:
<Property Id="MSMQINSTALLED">
<RegistrySearch Id="MSMQVersion" Root="HKLM" Key="SOFTWARE\Microsoft\MSMQ\Parameters" Type="raw" Name="CurrentBuild" />
</Property>
声明您的自定义操作。你需要两个。一个用于将属性设置为 dism 的路径,另一个用于执行它:
<CustomAction Id="InstallMsmq_Set" Property="InstallMsmq" Value=""[System64Folder]dism.exe" /online /enable-feature /featurename:msmq-server /all" Execute="immediate"/>
<CustomAction Id="InstallMsmq" BinaryKey="WixCA" DllEntry="CAQuietExec64" Execute="deferred" Return="check"/>
最后指定安装顺序中的自定义操作:
<InstallExecuteSequence>
<Custom Action="InstallMsmq_Set" After="CostFinalize"/>
<Custom Action="InstallMsmq" After="InstallInitialize">NOT REMOVE AND NOT MSMQINSTALLED</Custom>
</InstallExecuteSequence>
因为这可能需要一点时间,所以我添加了以下内容来更新安装程序状态文本:
<UI>
<ProgressText Action="InstallMsmq">Installing MSMQ</ProgressText>
</UI>
如果您想在安装失败时删除 MSMQ,您还可以指定回滚操作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)