1

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

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

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

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

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

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

<?define registry_key_path="SOFTWARE\MySoftwareGroup\MySoftware" ?>

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

<RegistryValue
  Root="HKLM"
  Key="$(var.registry_key_path)"
  Name="InstallFolder"
  Value="[INSTALLDIR]"
  Type="string" />

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

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

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

\SOFTWARE\MySoftwareGroup\MySoftware

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

<?define registry_key_path=SOFTWARE\MySoftwareGroup\MySoftware ?>

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

为什么要包括引号?

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

4

1 回答 1

1

适用于我的 WiX v3.11.1.2318。在 Orca 中打开您的 .msi 以检查Registry表并查看引号是否存在。如果您可以在一个小示例 .wixproj 中重现它,请打开一个错误

于 2018-01-25T22:36:45.417 回答