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

时间:2018-01-25 22:14:51

标签: wix wix3.11

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

我遇到过一种情况,我在一个proprocessor变量中定义的字符串包含在变量值中的封闭引号。

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

  1. 为什么会出现这种情况(我做错了什么?)
  2. 如何用空格引用字符串值
  3. 该项目有一个主 .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中删除引号:

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

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

    为什么要包含引号?

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

1 个答案:

答案 0 :(得分:1)

使用WiX v3.11.1.2318为我工作。在Orca中打开您的.msi以检查Registry表,看看那里是否存在引号。如果您可以在一个小例子.wixproj中重现它,请open a bug