Wix不允许用户覆盖目录
问题描述:
我正在使用自定义的UI,它可以在像installview,progressview,finishview,uninstallview等不同视图的流程中工作。在自定义安装程序中有两个选项,一个是更改安装目录和其他来更改数据库目录。我的自定义安装程序包含两个msi。每当我尝试将数据库目录传递给msi时,它都不会被覆盖。它始终采用默认路径。Wix不允许用户覆盖目录
我的自定义安装程序包含了数据库中的一个变量,它是overidable,并传递价值给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>
答
不知道你的意思是什么“但是,如果我改变了目录...”。你改变$(var.DatabaseProductName)或只是目录的编号价值?
,确保您在直接设置目录名验证您的目录结构“名称=”属性而不是传递一个值通过$(var.DatabaseProductName)
例子:
<DirectoryRef Id="TARGETDIR">
<Directory Id="CommonAppDataFolder">
<Directory Id="CompanyAppDataFolder" Name="Folder1">
<Directory Id="DATABASEAPPDATAFOLDER" Name="SubFolder1">
</Directory>
</Directory>
</Directory>
</DirectoryRef>
只是提醒。 目录标识仅供您参考.wxs文件中其他地方的文件夹。当您最终安装您的应用程序时,您为“Name =”属性填写的字符串将是您文件夹的实际名称。