WIX 启用 Windows 功能

标签 wix wix3.7 wix-extension dism

在安装我的软件之前,我必须检查是否启用了某些 Windows 功能。

我可以使用 dism 命令行工具检查或安装它。

我创建了一个自定义操作来执行此操作,但是有没有办法以“WIX native 方式”执行此操作?

<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>

问题是命令会启动一个命令提示符,这对最终用户来说非常难看。
我怎样才能让它更好?我不知道是否需要 bootstrap 来执行此操作(例如安装 .NET Framework)。

是否有任何扩展来管理这些事情?

我现在使用 WIX 3.7。

最佳答案

David Gardiner 的回答暗示了我的情况的正确解决方案。不需要创建自己的自定义操作。以下是 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="&quot;[System64Folder]dism.exe&quot; /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,您还可以指定回滚操作。

关于WIX 启用 Windows 功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18126502/

相关文章:

visual-studio-2012 - 当我在 Visual Studio 中构建解决方案时,Wix 项目无法编译

wix - 如何防止安装两次具有相同升级代码/版本的 WiX 包

xml - 如何: Making a program start on Windows startup with wix toolset?

c# - 将自定义安装操作移植到 Wix

msbuild - 本地化使用防火墙扩展的 WiX 安装程序

wix - Fragment 元素包含未处理的扩展元素 'util:RegistrySearch'

wix - 将 Bootstrap 与 MSI ui 一起使用

xslt - wix 快捷方式 xsl 文件

dll - 未解析的 WixUI 引用 :WixUI_InstallDir

WIX Office 检测扩展