2016-11-21 85 views
0

我正在使用自定义的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> 

回答

0

不知道你的意思是什么“但是,如果我改变了目录...”。你改变$(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 =”属性填写的字符串将是您文件夹的实际名称。