问题标签 [wix3.11]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
399 浏览

wix - Wix 预处理器变量值包括引号

使用 Wix 3.11,使用 msbuild 14.0.25420.1 构建的项目

我遇到了这样一种情况,即我在预处理器变量中定义的字符串在变量值中包含封闭引号。

如果有人能告诉我,我将不胜感激:

  1. 为什么会发生这种行为(我做错了什么吗?)
  2. 我如何用空格引用字符串值

该项目有一个主.wxs文件,以及一些.wxi 包含文件。

在Wix元素内的主要Product.wxs中:

然后在Component元素内的包含文件Component.wxi中:

安装失败并出现以下错误:

错误 1406。无法将值 InstallFolder 写入键 \"SOFTWARE\MySoftwareGroup\MySoftware"

您可以看到该键包含引号。它应该是:

\SOFTWARE\MySoftwareGroup\MySoftware

如果我从定义中删除引号:

安装程序正确解析变量并找到正确的注册表项并将其写入。

为什么要包括引号?

如果字符串值包含空格,我将如何引用它?

0 投票
1 回答
5511 浏览

wix - 如何在 WIX 中为目录分配路径值?

在我的 WIX 项目中,我有一个类似这样的目录结构:

这里INSTALLLOCATION代表我的程序的安装文件夹,但是我想另外创建一个安装目录之外的目录,例如D:\MyFolder1\MyFolder2,从上面的示例中,我如何分配这个值MYDIRECTORY以便在安装完成后创建它?

0 投票
1 回答
328 浏览

wix - 如何在 WIX 中的 ExitDialog 之后启动 Windows 服务

我想在 ExitDialog 中有一个复选框,并基于它启动或不启动我安装的 Windows 服务。我尝试使用执行命令行的自定义操作来启动 Windows 服务,这是我的 WIX 代码:

当我安装我的应用程序并标记复选框以运行 Windows 服务时,我收到此错误:Access is deniedm 这可能是因为操作 isimmediate而不是,但在这种情况下deffered我无法运行自定义操作。deffered

有什么办法可以克服我的问题吗?

0 投票
1 回答
115 浏览

visual-studio-2017 - 如何防止 Wix 在安装时覆盖目录

我有一个 Windows 应用程序,它有 2 个版本,但每个版本都有不同的名称。我使用相同的 .wxs 来构建,因为我没有理由创建第二个 wix 项目。我不想争论这里是否是个好主意。

问题是:每个版本都必须安装在

路径\主目录\版本目录

每个版本的 path \ mainDir 都相同。我的问题是 mainDir 在安装时被每个版本完全覆盖。假设我安装版本1,我将拥有

路径\mainDir\version1Dir

然后如果我安装 version2,而不是

路径\mainDir\version1Dir
路径\mainDir\version2Dir

我会有

路径\mainDir\version2Dir

我一直在尝试使用Wix 解决这个问题 - 如何防止覆盖整个目录?,但它仅适用于文件,因为无法将条件分配给目录(或者我可能还没有找到如何这样做,我不知道)。

我的目标是让每个版本都能够安装在自己的目录中,如果 mainDir 不存在则创建它,但只有在它为空时才将其删除。

这是代码,非常感谢任何线索。

0 投票
2 回答
347 浏览

wix - WiX:获取已安装的第 3 方程序的版本

我正在尝试将安装程序配置为仅在安装某些版本的 3rd 方应用程序时有条件地安装某些组件。

<EDIT>
应该注意的是,第 3 方软件版本与我们的版本之间存在 1:1 的对应关系。第 3 方软件的此类版本是否有几十个(加上每个月最多三个额外版本),所以我们这样做不想进行手动编辑。我们的程序是针对第 3 方软件的所有版本自动构建的,但安装哪些文件需要有条件地进行。
<\编辑>

我只是将它部署为单个 .MSI,所以没有 Bootstrapper 等。从我的阅读和谷歌搜索来看,我相信我需要有一个 UPGRADE 部分,以确定应用程序当前将具有什么 PRODUCTCODE(多个版本.. 所以有是多个 PRODUCTCODEs 可能的)。然后可以使用此 PRODUCTCODE 从注册表中读取 DisplayVersion。

所以我有:

对于升级部分,然后..

对于 REGISTRYSEARCH。

似乎 PRODUCTCODE 查找正在工作,但是 Registrysearch 没有.. (我期待 AppSearch 之后有一个 PROPERTY CHANGE 条目)

我已经尝试硬编码注册表查找(即用 {2ACE38B2-F142-4EFE-9AC7-B25514E4930E} 的静态文本替换 [CLEARSCADADETECTED]),没有任何更改。 Regedit 显示注册表项存在 对于检查内容的任何其他建议将不胜感激。

<EDIT 2>
好的,令人困惑的是,如果我引用 Version DWORD 值(而不是 DisplayVersion 字符串值),那么它确实将其正确读取为 #105781730。RegistrySearch 是否可能不适用于字符串值?
<编辑 2>

<EDIT 3>
是的......它正在工作。而且我想它现在也已经工作了一段时间。当我输入 Value='6.78.6626.1' 时,我应该意识到,如果我正在测试它的版本已经是 '6.78.6626.1',那么它就不会表明属性更改。
<编辑 3>

贝文

0 投票
0 回答
1388 浏览

wix - 在项目属性“构建”选项卡上定义的 Wix 变量未传递给蜡烛

在 bundle.wxs 中,我试图设置一个自定义变量,该变量基于正在构建的配置,如下所示:

我正在尝试在 VS2017 项目的“属性”>“构建”选项卡上设置“siteloc”。我正在尝试预处理器和 wixvariable 以使至少一个通过。 Visual Studio wix bootstrap 项目属性构建选项卡

在 wixproj 文件中,我可以看到这些:

当我构建时,我得到 CNDL0150:未定义的预处理器变量'$(var.siteloc)'。如您所见,我的变量(任何一个)都没有作为参数添加到 VS 控制台中的蜡烛:

我试过这个SF 建议

但它没有用。

我错过了什么?

0 投票
1 回答
1079 浏览

wix - Wix 工具集许可协议多语言问题

我创建了具有多种语言的 license.rtf 文件,当我尝试构建我的 wix 项目时,它向我显示了这个错误:

为字符串提供了指定数据库代码页“1252”中不可用的字符。将这些字符更改为数据库代码页中存在的字符,或通过修改以下属性之一来更新数据库的代码页:Product/@Codepage、Module/@Codepage、Patch/@Codepage、PatchCreation/@Codepage 或 WixLocalization /@代码页。

我试图在产品标签上添加这个属性Codepage="1256"它仍然显示相同的错误。

你能帮我解决这个问题吗?

0 投票
2 回答
829 浏览

wix - Wix 安装程序:捆绑的 MsiPackage 导致安装包尝试再次运行?

我现在定义了以下非常基本的 WIX 3.11 捆绑包,并且我已经删除了在安装 MSI 之前触发的 execpackages,因为我要描述的问题仅发生在 MSIPackage 命令和特定的第三方 MSI 我是使用。

发生的事情是在捆绑包部署 MSI 并且存在安装成功完成对话框时,再次修改设置对话框(修复卸载取消)。

它似乎只发生在我需要安装的第三方 MSI 上。我无法控制此 MSI,也无法从制造商那里获得更改的支持。

我已经用另一个随机产品替换了 MSI,它不会导致同样的问题。它的部署没有有效地尝试再次运行捆绑安装程序。

我已经从命令行运行了第三方 MSI,并检查了它在注入时的返回代码,它返回 0。

我很困惑是什么导致安装程序认为它需要在完成此 MSI 后再次运行自己。没有 UUID 发生冲突,我认为我的 xml 中没有任何问题。

如果有人能对此有所了解,我将不胜感激。目前我唯一能想到的就是尝试通过从命令行运行 msiexec 的 execpackage 方法将这个特定的 MSI 部署到平台,但这完全否定了我首先使用捆绑包的原因。

提前致谢。

0 投票
2 回答
2982 浏览

wix - 如何使用 Wix Installer 下载和安装 .NET Framework?

我们有一个依赖于已安装的 .NET Framework 4.5 的应用程序。当未安装 .NET Framework 4.5(或更高版本)时,Wix 设置应自动检测。这适用于以下 wix 声明:

我们的目标:Wix 安装程序应自动下载并安装 .Net Framework 4.5。似乎,“刻录”提供了一种机制,让安装程序自动安装 .NET 框架:http ://wixtoolset.org/documentation/manual/v3/howtos/redistributables_and_install_checks/install_dotnet.html 。该文档定义了对 .NET Framework 的安装文件的引用:

但是我们不想将 .NET Framework 添加到我们的安装程序中。安装程序应自动将其下载到将执行安装程序的目标系统上。

我们怎样才能做到这一点?

0 投票
1 回答
1490 浏览

wix - Wix:系统找不到文件“SourceDir”

我该死的使用 wix 和 wixtoolset 3.11 构建设置。是的,它是地狱。使用此工具集做简单的事情并阅读手册会消耗大量时间和金钱。

我的目标:安装程序应该下载并安装 .NET Framework 4.5。这是声明:

我不想将任何 .NET Framework 安装程序嵌入到我的设置中,但无论出于何种原因,都需要属性“名称”或“源路径”之一。我使用属性“SourcePath”或“Name”,这两个声明都需要一个现有文件的路径。是的,当然,这是真的。那是维克斯。

当我对路径使用“SourceFile”时,Visual Studio 中的编译器运行成功,但在未安装 DotNet Framework 4.5 的目标系统上,没有任何反应。不会安装任何框架。好的,然后我尝试使用属性“名称”并传递值“Framework\dotNetFx45_Full_setup.exe”。编译设置时,我收到以下错误:

系统找不到文件“SourceDir\Framework\dotNetFx45_Full_setup.exe”

嗯...什么是SourceDir,为什么我需要删除一个路径,或者我希望安装程序下载文件?很多问题,但让我们从第一个开始:

如何解决有关神秘的“SourceDir”的问题?