2016-11-21 105 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 =」屬性填寫的字符串將是您文件夾的實際名稱。