我正在使用自定义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>
答案 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 = ”属性填写的字符串将是您最终安装应用程序时文件夹的实际名称。