【问题标题】:How does association between Directory and Property/Variable work in WiX?目录和属性/变量之间的关联如何在 WiX 中工作?
【发布时间】:2018-01-23 17:03:00
【问题描述】:

在 Wix (3.11) 中,ID 为“ProgramFilesFolder”的 a 和“ProgramFilesFolder”变量之间似乎存在隐式链接。也就是说,具有该 id 的目录将根据属性值命名。

当我尝试使用“测试”目录自行复制时:

<Property Id="Test" Value="Test"/>

<Directory Id="TARGETDIR" Name="SourceDir">
  <Directory Id="ProgramFilesFolder">
     <Directory Id="Test"/>
       ...

我收到来自 WiX 的警告,安装程序实际上挂起。我也尝试将“Test”声明为 WixVariable,但在这种情况下,该元素似乎被简单地忽略了 - iow,没有创建“Test”文件夹。

我的问题是这个隐式链接如何适用于 WiX 变量,但不适用于我自己的?

【问题讨论】:

    标签: wix windows-installer


    【解决方案1】:

    ProgramFilesFolder 并不是真正的 WiX 变量或 Id。这是您无法更改的 Windows Installer 标准属性 - 它指的是您正在安装的系统上的 32 位程序文件路径。您的测试目录将位于 Program Files 文件夹下。

    没有足够的 WiX 源来查看发生了什么,但如果没有安装任何内容,仅声明这些位置和属性将不会创建目录。该问题的完整工作示例会很有用。

    【讨论】:

    【解决方案2】:

    您不需要为您的目录定义单独的属性,因为directories are properties,目录的 id 兼作属性。如果属性(目录id)全部大写,则变为public property,可以在命令行中设置。

    <Directory Id="TARGETDIR" Name="SourceDir">
      <Directory Id="ProgramFilesFolder">
         <Directory Id="TEST" Name="Test" />
           ...
    

    command line设置TEST目录的安装路径:

    msiexec /i A:\Example.msi TEST=c:\Example\Test /qn
    

    目录 ID“ProgramFilesFolder”有点不同,因为它是 Windows Installer 预定义的 System Folder Properties 之一。

    您可能应该为您的 TEST 目录指定一个名称。见Directory Element

    如果此目录表示与父目录相同的目录,请不要指定此属性(或 LongName 属性)(有关“.”运算符的详细信息,请参阅 Windows Installer SDK 的目录表主题)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-29
      • 2015-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-28
      • 2019-04-01
      相关资源
      最近更新 更多