在目录名称中使用隐含属性

时间:2012-12-25 12:33:44

标签: wix wix3.5

这是我正在尝试做的一个例子:

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product Id="*" Name="SetupProject1" Language="1033" Version="1.0.0.0" Manufacturer="MySoftware" UpgradeCode="d2192e52-f4f6-461c-9d8e-eb66067df09a">
    <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />

    <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
    <MediaTemplate />

    <Feature Id="ProductFeature" Title="SetupProject1" Level="1">
        <ComponentGroupRef Id="ProductComponents" />
    </Feature>
</Product>

<Fragment>
    <Directory Id="TARGETDIR" Name="SourceDir">
        <Directory Id="ProgramFilesFolder">
            <Directory Id="INSTALLFOLDER" Name="[Manufacturer] SetupProject1" />
        </Directory>
    </Directory>
</Fragment>

<Fragment>
    <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
        <!-- TODO: Remove the comments around this Component element and the ComponentRef below in order to add resources to this installer. -->
        <!-- <Component Id="ProductComponent"> -->
            <!-- TODO: Insert files, registry keys, and other resources here. -->
        <!-- </Component> -->
  <Component Id="CMP_NEW">
    <File Id="FILE_NEW" Source="New Text Document.txt" KeyPath="yes" />
  </Component>
    </ComponentGroup>
</Fragment>

在ProgramFiles中创建的文件夹是[Manufacturer] SetupProject1而不是MySoftware SetupProject1。我做得对吗?如果没有,我该怎么办呢?

先谢谢!

2 个答案:

答案 0 :(得分:0)

创建一个变量$(var.Manufacturer)并像这样使用它:

像这样定义:<?define Manufacturer = "MySoftware"?>

<Product Id="*" Name="SetupProject1" Language="1033" Version="1.0.0.0" Manufacturer="$(var.Manufacturer)" UpgradeCode="d2192e52-f4f6-461c-9d8e-eb66067df09a">

<Directory Id="INSTALLFOLDER" Name="$(var.Manufacturer) SetupProject1" />

那将有效.. :)

答案 1 :(得分:0)

我遇到的问题是您无法将预处理器变量设置为安装期间定义的值,例如在UI中。我正在尝试将目录名称设置为User提供的属性。

到目前为止,我看到的关键方法是使用自定义操作将Directory数据表更改为您可能引用的属性的值。只需确保为自定义操作计时,以便在正常设置目录之前不会发生,否则可能会被覆盖。

然而,我仍在寻找一些更漂亮的东西。