2009-11-06 52 views
13

這個應該是很容易,但幾個小時後我就空白了。 (根據條件在WiX中設置屬性

我做一個註冊表搜索(實際上是兩個),因爲我需要檢查前兩次安裝的要麼,然後安裝我的新文件的安裝被發現之前的位置

  • 只有一個這些現有安裝的居然會存在。

然後我需要我的新文件安裝到「PROD#」被發現了「INSTALLLOCATION」。

<!— Look for the UnInstall key of the 1st possible product --> 
<!— GUID = {E928E024-DEFE-41A7-8469-D338212C4943}   --> 
<Property Id='PROD1'> 
    <RegistrySearch Id='PROD_REG1' 
        Type='raw' 
        Root='HKLM' 
        Key='$(var.REGKEY_PROD1)' 
        Name='InstallLocation' /> 
</Property> 

<!— Look for the UnInstall key of the 2nd possible product --> 
<!— GUID = {A40A9018-DB9D-4588-A591-F012600C6300}   --> 
<Property Id='PROD2'> 
    <RegistrySearch Id='PROD_REG2' 
        Type='raw' 
        Root='HKLM' 
        Key='$(var.REGKEY_PROD2)' 
        Name='InstallLocation' /> 
    </Property> 

<!-- How do I set INSTALL_HERE Property to whichever ‘InstallLocation’ was found? --> 

<!-- Define the directory structure --> 
<Directory Id="TARGETDIR" Name="SourceDir"> 
    <Directory Id="INSTALL_HERE"> 
     <Directory Id="MAIN_DIRECTORY" Name="MyProduct"/> 
     <Directory Id="HELP_DIRECTORY" Name="Help"/> 
    </Directory> 
</Directory> 
+0

所以你想找到創建1個安裝程序將安裝在哪一個頂部2種不同的產品? – 2009-11-06 20:31:57

回答

22

以下將設置屬性A和B爲兩個不同註冊表搜索的結果。如果B中的搜索是全成,將覆蓋A的值與B的值

<Property Id="A"> 
    <!-- registry search 1 here --> 
    </Property> 

    <Property Id="B"> 
    <!-- registry search 2 here --> 
    </Property> 

    <SetProperty Id="A" After="AppSearch" Value="[B]"> 
    B 
    </SetProperty> 

注意SetProperty元素如何使用B的值兩次:一次爲Value="[B]"覆蓋A的價值,一次作爲自定義操作的條件文本。 After="AppSearch"確保在註冊表搜索後立即執行自定義操作。

又見this answer of Rob Mensching

+0

非常感謝! 1> Agent_9191:是的,這基本上是我需要做的。 我的應用是附加在產品上的,我可以知道'主'產品的安裝位置(如果安裝的話)的唯一方法是查看註冊表中'主'產品的卸載信息。 我的問題來自這樣一個事實,即無論何時更新「主」產品,先前的卸載信息都將消失,並替換爲最新更新的信息。如果他們再次更新它,我需要第三次註冊表搜索! 2> wcoenen:就像我說的:這應該很容易「,但我只是沒有得到它 ***感謝您的幫助!*** – Zerren 2009-11-09 19:05:45