WIX 启用 Windows 功能

2023-11-30

在安装软件之前,我必须检查某些 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="&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,您还可以指定回滚操作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WIX 启用 Windows 功能 的相关文章

  • 如何使用 WiX 安装和启动 Windows 服务

    我尝试在 Wix 中使用下面的代码 但是在安装时 安装程 序在 正在启动服务 状态下冻结了大约 3 分钟 然后我收到此消息 Service Jobservice 无法启动 请验证您是否有足够的权限来启动系统服务 我的代码有什么错误吗 并且可
  • ClickOnce 有哪些替代方案? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我用过单击一次 https en wikipedia org wiki ClickOnce多年来 我经历
  • 成功后动态改变EndDialog中的RTF内容

    多亏了这个question https stackoverflow com a 33679439 1076116 我能够执行自定义操作来临时更新和动态修改 MSI 数据库 简而言之 我正在做 CustomAction public stat
  • 如何使用自定义操作在 WiX 中运行脚本 - 最简单的示例?

    WiX新手问题 我该怎么办1 将一次性 shell 脚本与安装程序一起复制到 temp e g
  • 与 WiX 3.0 一起安装 WiX 3.5

    是否可以同时安装 WiX 3 0 和 3 5 如果我在安装 3 0 后安装 3 5 它会删除 3 0 文件 如果我尝试在 3 5 之后安装 3 0 它会告诉我已经安装了较新的版本 我正在从 VS 2008 迁移到 VS 2010 因此我的应
  • 使用 WiX 将程序集放入 GAC 和安装路径中

    我刚刚开始学习如何使用 WiX 但遇到了障碍 我的软件包使用第三方库 该库要求 GAC 和软件包安装目录中都存在一些文件 使用 WiX 我可以使文件显示在安装目录或 GAC 中 但不能同时显示在两者中 有什么办法可以解决这个问题吗 这里有一
  • 根据 VS 活动配置定义 Wix 属性和值

    如何定义根据激活的 Visual Studio 配置而变化的 Wix 属性和值 例如对于我们的发布版本 var x 1 对于导出版本 var x 2 我们使用 wixproj 文件将属性传递到 WiX
  • Wix:动态添加功能

    我们正在使用 Wix 为我们的软件构建 msi 我们有一些要在目标机器上实现的组件 插件 每个客户端的插件都不同 我们想要做的是创建一个标准构建并修改 msi 包中的功能列表 有没有办法通过自定义操作动态更改功能列表 例如 从自定义操作中读
  • wix 3 安装程序:未解析的绑定时变量!(bind.fileVersion.Name.exe)

    我正在尝试使用 Wix3 中的绑定 bind fileVersion 即 3 11 1 由于某些原因 我收到以下错误消息 未解析的绑定时变量 bind fileVersion TestWix3 exe 我的目标是填写 产品 ID 行 特别是
  • WiX:数字签名 BootStrapper 项目

    我有一个项目 我为其构建了 WiX msi 文件 我还有一个 WiX 引导程序 exe 文件 用于检查 C 2005 是否存在 如果未找到则安装它 然后安装 msi 软件包 我的项目包括作为 msm 文件的 Crystal Reports
  • 警告 LGHT1076:ICE91:文件“doc_code_file1”将安装到每个用户目录“code_Simple”

    即使我添加了注册表值设置 它给出以下警告 warning LGHT1076 ICE91 The file doc code file1 will be installed to the per user directory code Sim
  • 创建新用户并将其添加到管理员时出现权限错误

    我用 WiX 3 8 创建了一个设置项目 我想在其中创建一个新用户并将其添加到管理员组 但每次我的设置达到这一点时 我都会因为权限不足而收到错误 这有点奇怪 因为我的用户是虚拟机的管理员 我在虚拟机上测试设置 我能做些什么 这是 WXS 文
  • Wix 4 收获目录的解释?

    我正在尝试学习 Wix 4 0 来为我正在开发的应用程序创建安装程序 构建我的应用程序后 我在一个文件夹中有一堆文件 我想将它们安装到程序文件中 我已经读到收获功能允许我简化此过程并为整个目录创建组件映射 但我不确定这是什么example
  • 让 WiX Bootstrapper 用于 .NET 4.0 的引导

    我一直在寻找让我的引导程序能够安装 NET 4 0 和我自己的应用程序 我查看了几个博客和教程 但无法让它发挥作用 我在 Stack Overflow 问题中读到在 WiX 中启动 调用引导程序 https stackoverflow co
  • WIX 检测待重启

    我正在使用带有 WiX 的自定义 BA 我想检测是否存在挂起的重新启动 以在用户尝试安装之前警告他们 结果却失败了 如何在 Burn WiX 中引用重新启动挂起属性 https stackoverflow com questions 108
  • WiX Installer:获取正在升级的产品版本

    在从版本 X 到版本 Y 的主要升级过程中 我需要一个属性 变量来表明版本 X 正在升级 当使用 WiX Installer 构建的安装程序对产品进行主要升级时 是否有办法获取正在升级的版本号 假设您使用 WiX Majorupgrade
  • WiX Heat:预构建事件在构建服务器上过早触发

    我正在为我的 Visual Studio 解决方案收集一个目录 到目前为止 它在我的本地系统上运行可能是因为项目构建顺序得到了尊重 当我在构建服务器上运行安装程序时 它会找到正确的目录 但在构建安装文件时尚未创建该目录 它抛出一个HEAT5
  • 在 Azure DevOps 中为 Wix MSI 文件生成 GUID

    我正在为 Web 服务器应用程序和 Sitecore 前端应用程序设置 Wix 安装程序 我的问题并非特定于 Web 服务器或 Sitecore 我的问题是 Wix 以及如何使用它进行持续交付 1 Wix 需要每个文件和产品本身的 GUID
  • 用于检查和安装先决条件的安装项目与引导程序项目

    这是我的情况 我创建了一个普通的 WiX 安装项目 然后我尝试检查一些先决条件 例如是否安装了 NET 框架 我似乎无法从 WiX 安装项目中执行此操作 所以我创造 WiX Bootstrapper 项目 我能够检查并安装它们 先决条件 我
  • 重新缓存的 msi 仍在运行旧的自定义操作

    我已对 msi 文件中的自定义操作进行了更改 以便在服务停止或停止挂起时不尝试停止 Windows 服务 但是 在使用 msiexec fv mymsi msi 重新缓存 msi 后 当运行到下一个版本的主要升级 其中也有更正的服务停止自定

随机推荐

  • 改变矩阵维度

    让我们举一个可复制的例子 这是我的初始矩阵 d lt matrix 1 80 5 d 1 2 3 4 5 1 1 17 33 49 65 2 2 18 34 50 66 3 3 19 35 51 67 4 4 20 36 52 68 5 5
  • 在 asp net mvc 5 中使用会话变量进行授权

    所以我的项目需求发生了变化 现在我想我需要构建自己的操作过滤器 所以 这是我当前的登录控制器 public class LoginController Controller GET Login public ActionResult Ind
  • 如何随机均衡不相等的值?

    假设我有多个不相等的值 a b c d e 是否可以仅通过随机数生成将这些不相等的值变成相等的值 示例 a 100 b 140 c 200 d 2 e 1000 我希望算法随机定位这些集合 以便最常定位最大值 而大多数情况下只保留最小值 我
  • 当列类型为 nvarchar 时,将表与列值总和一起旋转

    我有一个具有以下结构的表 我想转置它 BookId Status 123A Perfect 123B Restore 123C Lost 123D Perfect 123A Perfect 123B Restore 123A Lost 12
  • rpy2 在 Windows 7 上安装

    我试图在我的计算机上安装 rpy2 但无法做到这一点 我下载了源码包 并尝试使用命令安装Rpy2 rpy2 2 3 2 python setup py install 这是结果 running install running build r
  • 我想获取 SD 卡中的音频文件

    在我的应用程序中我想设置ringtone当我接到来电时 如何打开SDCARD并得到音频文件并列出它 如何获得URI对于所选的audio file MediaScanner 为您查找音乐 填充 MediaStore 数据库 下面是一些查找音乐
  • 使用可选参数和命名参数解决歧义

    我的项目有两种方法 定义如下 void Person int ID double height 0 0 string team Knights my codes void Person int ID double height 0 0 st
  • 如何组合两个机器学习算法的输出?

    如果我有两个非常不同的数据集和两种非常不同的分类技术 是否有一个很好的方法来组合这两个输出 我知道平均值可能有效 但有没有更相关的方法来做到这一点 我听说过一些概念 例如增强学习和集成学习 这些概念是否适用 解决这个问题有两种一般方法 第一
  • 使用部分可变参数调用函数

    考虑我有以下内容 void bar int a int b template
  • 如何设计 HTML5 表单验证消息的样式? [复制]

    这个问题在这里已经有答案了 假设你有一些像这样的 HTML
  • 使用 .htaccess 来屏蔽域名?

    所以这是场景 我拥有的域名是 www abc com 我想将其指向 属于另一家公司 问题 如何使用 htaccess 转发和屏蔽 URL 使其保持为 www abc com 从安全角度来说 为www abc com购买数字证书有什么意义吗
  • 未处理的拒绝(TypeError):ships.reduce 不是函数

    我使用特定的 API 构建了一个船可视化器 API 返回一个 json 响应 我将其注入到表中 问题 有时在白天 我注意到应用程序会停止工作并抛出以下实例 Unhandled Rejection TypeError ships reduce
  • numpy einsum:嵌套点积

    我有两个n by k by 3 arrays a and b e g import numpy as np a np array 1 2 3 3 4 5 4 2 4 1 4 5 b np array 3 1 5 0 2 3 2 4 5 1
  • Mockito 和 PowerMock MethodNotFoundException 被抛出

    当使用 Powermockito 和 Mockito 为我围绕 Hikari CP 制作的连接池构建一些简单的单元测试时 遇到以下错误 测试的设置如下 让我感到困惑的是 我有一大堆未显示的单元测试 它们都使用相同的设置和方法通过了 仅此一个
  • 在 ARCore unity 中禁用/切换跟踪平面的可视化

    我已经研究 ARCore Unity 的代码有一段时间了 我想做一个简单的任务 即有一个切换按钮 以便用户可以在场景中放置一个对象 同时知道在跟踪平面可见时将其放置在哪里一旦用户放置了对象 他就可以选择仅在视觉上禁用跟踪的平面 使其看起来更
  • 在 C 的哪些版本中,括号内的块用于返回有效值?

    If I do int j int x 7 x 3 在 i686 apple darwin10 gcc 4 2 1 GCC 4 2 1 Apple Inc build 5646 gcc 中 它编译得很好 有问题的块 int x 7 x 3
  • 悬空指针,free()后值改变的原因?

    在下面的代码段中 之后free x 为什么y变成0 根据我的理解 所指向的堆中的内存x 并且仍然被指出y 还没有分配给别人 怎么会变成0呢 而且 我不认为这是free x 这将其更改为 0 任何意见 include
  • Gradle 复制任务第一次不从临时文件夹复制文件

    我有一个运行这样的任务的构建文件 Task 1 unpackWar 将war文件解压到Temp文件夹 Task 2 copyWarFilesToWebContent 将文件复制到 WebContent 文件夹 并排除一些内容 Task 3
  • Android EditText 提示大小

    如何减少EditText提示尺寸 您可以通过在字符串资源中设置大小来完成此操作 例如
  • WIX 启用 Windows 功能

    在安装软件之前 我必须检查某些 Windows 功能是否已启用 我可以使用 dism 命令行工具检查或安装它 我创建了一个自定义操作来执行此操作 但是有没有办法以 WIX 本机方式 执行此操作