gpt4 book ai didi

WIX 启用 Windows 功能

转载 作者:行者123 更新时间:2023-12-04 23:23:21 24 4
gpt4 key购买 nike

在安装我的软件之前,我必须检查是否启用了某些 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com