将安装目录基于ProductCode

时间:2017-01-12 19:16:15

标签: wix wix3.10

我是Wix的新手。

我从这个例子开始:

https://helgeklein.com/blog/2014/09/real-world-example-wix-msi-application-installer/

他有一个使用变量计算INSTALLDIR的计算例程(实际上,区域设置信息如下所示)。

<!-- All folders from here on are relative to their parent. -->

<Directory Id="ProgramFilesHK" Name="!(loc.ManufacturerName)">

  <!-- INSTALLDIR is a property name. We need it later for the UI (to be able to change the install dir. -->
  <Directory Id="INSTALLDIR" Name="!(loc.ApplicationName)">

其中(在示例中)解析为:

  

C:\ Program Files(x86)\ Helge Klein \ uberAgent \

我正在尝试将ProductCode作为所有嵌套子文件夹的(最后)子文件夹。

阿卡,我想:

  

C:\ Program Files(x86)\ Helge Klein \ {22222222-2222-2222-2222-222222222222} \

我发现了这个:

Obtaining generated ProductCode as a variable in Wix

所以我试图将代码更改为:

        <!-- INSTALLDIR is a property name. We need it later for the UI (to be able to change the install dir. -->
        <Directory Id="INSTALLDIR" Name="[PRODUCTCODE]">

以及

        <Directory Id="INSTALLDIR" Name="[ProductCode]">

不幸的是,这给了我

C:\Program Files (x86)\Apps\CCT\[ProductCode]\

而不是实际ProductCode的Guid值

为什么我要这样做?

我正在进行实例安装,

  <Property Id="INSTANCEID" Value="0"/>
  <InstanceTransforms Property="INSTANCEID">
    <Instance Id="I01" ProductCode="{22222222-2222-2222-2222-222222222222}" ProductName="My Product 01"/>
    <Instance Id="I02" ProductCode="{33333333-3333-4f1a-9E88-874745E9224C}" ProductName="My Product 02"/>
    <Instance Id="I03" ProductCode="{44444444-4444-5494-843B-BC07BBC022DB}" ProductName="My Product 03"/>
  </InstanceTransforms>

和本文

http://ysdevlog.blogspot.com/2011/08/revisited-multiple-instance.html

说:

  

对于文件数据,这意味着将每个实例的文件安装到   不同的位置 - 包含实例ID的路径   最合适。

如何在“计算”安装目录逻辑中“获取”ProductCode?

感谢。

不可用标签:Wix版本3.10

请注意重复的问题“标记”。

这与Wix Installer - Create Folder hierarchy based on Property不同,因为宏值实际上已解析。

此处的问题是宏值无法解析。

1 个答案:

答案 0 :(得分:0)

你可以将它添加到你的wxs并查看它是否有效吗?

<CustomAction Id="SetInstallDir" Property="INSTALLDIR" 
              Value="[PRODUCTCODE]" 
              Execute="firstSequence" />

<InstallExecuteSequence>标记内:

<Custom Action="SetInstallDir" Before="CostFinalize">INSTALLDIR=""</Custom>