2011-10-25 61 views
2

任何幫助將不勝感激。WIX MSI - PROPERTY覆蓋優先

我正在編寫這個WIX安裝程序,讓MSI在我們的服務器上安裝一個Web應用程序。

在我的應用程序中,我有這個屬性 - 「WEBDIR」。我稍後在我的代碼中使用這個屬性作爲Directory Id。

我以3種方式設置此屬性。

  1. (方法'A')作爲在安靜模式下調用msiexec時傳遞的屬性。 [在此將其設置爲C:\路徑1],如下所示:

    msiexec /quiet /i My.msi WEBDIR="C:\Path1" /l*v InstallationLog.log 
    
  2. (方法 'B')從IniFileSearch。我在C:\ Windows中有一個名爲MySetup.ini的ini文件,其中關鍵WebsitesDir解析值C:\ Path2。 [在此將其設置爲C:\路徑2]:

    <Property Id="WEBDIR"> 
        <IniFileSearch Id="WebsitesDirIni" Name="MySetup.ini" Section="InstallLocations" Key="WebsitesDir" Type="raw"/> 
    </Property> 
    
  3. (方法 'C')使用默認的目錄結構。 [在這裏將其設置爲C:\ PATH3]如下:

    <Directory Id="TARGETDIR" Name="SourceDir"> 
        <Directory Id="WEBDIR" Name="Path3"> 
        </Directory> 
    </Directory> 
    

它目前的工作方式如下: - 當方法 'A', 'B' 和 'C' 的所有設置屬性值,B優先。 - 只有方法'A'和'C'設置屬性值時,'C'優先。

我想要的是能夠將優先順序設置爲'A'。如果!'A'然後'B'其他'C'。

這可能嗎?

回答

0

不,這是不可能的。如果你想控制訂單,最好的方法是immediate custom action。由於需要設置安裝程序屬性,因此您的自定義操作必須接收安裝句柄(建議使用win32 DLL)。

在正常情況下,安裝程序將用這個命令:

  1. 的命令行值初始化屬性
  2. 目錄行設置初始文件夾路徑,重寫命令行值。此路徑可稍後通過成本計算操作進行修改(CostFinalize)。
  3. 搜索覆蓋初始文件夾路徑,但可能會被成本計算操作覆蓋。