2012-01-23 76 views
5

我需要創建一個安裝文件來檢查註冊表中是否有其他軟件的版本。目前,我正在評論和取消註釋單獨安裝的代碼行。我怎樣才能把下面的條件變成條件?WiX屬性ID或條件聲明

<!--<Property Id="ACADREG" Value="ACAD-A001:409" /> Autocad 2012--> 
<Property Id="ACADREG" Value="ACAD-A004:409" /> <!--Autocad Arch 2012--> 

我還需要獲取哪個版本,供以後在安裝中使用。

<Property Id="ACADROAMDIR"> 
    <RegistrySearch Id="ROAMROOTDIR" Root="HKCU" Type="raw" Key="Software\Autodesk\AutoCAD\[ACADVER]\[ACADREG]" Name="RoamableRootFolder" /> 
    </Property> 


    <Property Id="ACADDIR"> 
    <RegistrySearch Id="AcadLocRegistry" Type="raw" Root="HKLM" Key="SOFTWARE\Autodesk\AutoCAD\[ACADVER]\[ACADREG]" Name="AcadLocation" /> 
    </Property> 

有沒有辦法維克斯可以通過讀取註冊表,而不是我的設置它像我上面那樣設置[ACADREG]?

+0

''元件用於讀取從註冊表的信息。然後,您可以根據此屬性的值來控制執行哪些組件,功能和操作。 –

+0

你可以閱讀註冊表中的兩個版本的軟件,並提供一個屏幕給用戶從中選擇一個... – vinay

回答

1

您可以使用Preprocessor條件:

<?define AutocadSku = "ACAD2012" ?> 

<?if $(var.AutocadSku) = "ACAD2012" ?> 
    <Property Id="ACADREG" Value="ACAD-A001:409" /> 
<?else?> 
    <Property Id="ACADREG" Value="ACAD-A004:409" /> 
<?endif ?> 

甚至更​​好,最好的做法是尋找兩者,所以以後你可以有條件地檢查每個屬性的存在或內容:

<Property Id="ACADROAMROOTDIR"> 
    <RegistrySearch Id="ROAMROOTDIR" Root="HKCU" Type="raw" Key="Software\Autodesk\AutoCAD\R18.2\ACAD-A001:409" Name="RoamableRootFolder" /> 
</Property> 
<Property Id="ACADROAMARCHROOTDIR"> 
    <RegistrySearch Id="ARCHROAMROOTDIR" Root="HKCU" Type="raw" Key="Software\Autodesk\AutoCAD\R18.2\ACAD-A004:409" Name="RoamableRootFolder" /> 
</Property> 
+0

這看起來像我仍然會創建兩個單獨的.msi包。我想要創建一個兼容兩個版本的AutoCAD的.msi文件。 – Robert

+0

沒有,但它只是迫使你保持這些屬性。我認爲你不應該讓它過度複雜化。根據我對您的要求的理解,我已經更新了答案。 – KMoraz

+0

這真的不是我正在尋找的東西。我用我的代碼看起來更新了我的帖子。 – Robert

0

似乎你想重新定義屬性,如果AutoCAD Arch 2012被定義,否則使用Autocad 2012. 我有類似的問題,我用我在這個SO上找到的解決方案question

<Property Id="ACADREG" Value="ACAD-A001:409" /> <!-- Autocad 2012--> 
<Property Id="ACADREG_ARCH" Value="ACAD-A004:409" /> <!--Autocad Arch 2012--> 


<Property Id="ACADROAMDIR"> 
<RegistrySearch Id="ROAMROOTDIR" Root="HKCU" Type="raw" Key="Software\Autodesk\AutoCAD\[ACADVER]\[ACADREG]" Name="RoamableRootFolder" /> 
</Property> 

<Property Id="ACADROAMDIR_ARCH"> 
<RegistrySearch Id="ROAMROOTDIR" Root="HKCU" Type="raw" Key="Software\Autodesk\AutoCAD\[ACADVER]\[ACADREG_ARCH]" Name="RoamableRootFolder" /> 
</Property> 

<Property Id="ACADDIR"> 
<RegistrySearch Id="AcadLocRegistry" Type="raw" Root="HKLM" Key="SOFTWARE\Autodesk\AutoCAD\[ACADVER]\[ACADREG]" Name="AcadLocation" /> 
</Property> 

<Property Id="ACADDIR_ARCH"> 
<RegistrySearch Id="AcadLocRegistry" Type="raw" Root="HKLM" Key="SOFTWARE\Autodesk\AutoCAD\[ACADVER]\[ACADREG_ARCH]" Name="AcadLocation" /> 
</Property> 

<SetProperty Id="ACADROAMDIR" After="AppSearch" Value="[ACADROAMDIR_ARCH]"> 
ACADROAMDIR_ARCH 
</SetProperty> 

<SetProperty Id="ACADDIR" After="AppSearch" Value="[ACADDIR_ARCH]"> 
ACADDIR_ARCH 
</SetProperty> 

之後,所需的屬性將正確處於ACADDIR和ACADROAMDIR