Wix不允许用户覆盖目录

时间:2016-11-21 12:54:38

标签: wix

我正在使用自定义UI,它可以在不同视图的流程中工作,例如installview,progressview,finishview,uninstallview等。在自定义安装程序中有两个选项,一个是更改安装目录,另一个是更改数据库目录。我的自定义安装程序包含两个msi。每当我尝试将数据库目录传递给msi时,它都不会覆盖。它始终采用默认路径。

我的自定义安装程序包含一个可以覆盖的数据库变量,并将值传递给msi。

<Variable Name="DatabaseFolder" bal:Overridable="yes" Type="string" Value="[CommonAppDataFolder]$(var.ManufacturerName)\$(var.ProductName)" />


<MsiPackage Id="StorageApp"
              DisplayInternalUI="no"
              DisplayName="$(var.StorageApp)"
              Permanent="no"
              Visible="yes"
              Vital="yes"
              SourceFile="$(var.StorageAppExe)"
              Compressed="yes">  
              <MsiProperty Name="DATABASEAPPDATAFOLDER" Value="[DatabaseFolder]" />
  </MsiPackage> 

默认情况下,它将DatabaseProductName作为目录名称。但如果我改变了目录,它总是采用默认路径。为什么我不能覆盖默认值。我的代码中是否有任何遗漏?

<DirectoryRef Id="TARGETDIR">
  <Directory Id="CommonAppDataFolder">
    <Directory Id="CompanyAppDataFolder" Name="$(var.DatabaseManufacturerName)">
      <Directory Id="DATABASEAPPDATAFOLDER" Name="$(var.DatabaseProductName)">
      </Directory>
    </Directory>
  </Directory>
</DirectoryRef> 

1 个答案:

答案 0 :(得分:0)

不确定你的意思“但如果我改变了目录... ”。您是否更改了 $(var.DatabaseProductName)的值或仅更改了目录ID

确保通过直接在“ Name = ”属性中设置目录名来验证目录结构,而不是通过 $(var.DatabaseProductName) <传递值/ p>

示例:

<DirectoryRef Id="TARGETDIR">
  <Directory Id="CommonAppDataFolder">
    <Directory Id="CompanyAppDataFolder" Name="Folder1">
      <Directory Id="DATABASEAPPDATAFOLDER" Name="SubFolder1">
      </Directory>
    </Directory>
  </Directory>
</DirectoryRef> 

提醒一下。 目录ID 仅供您在.wxs文件中的其他位置引用您的文件夹。您为“ Name = ”属性填写的字符串将是您最终安装应用程序时文件夹的实际名称。