2013-12-09 44 views
0

我想將一些文件複製到另一產品的安裝樹中的一個目錄中,但僅限於該產品已安裝。所以我想我可以根據註冊表搜索設置屬性來查找產品的安裝根目錄。然後我可以在組件元素的condition元素中使用該屬性。使用WiX,當某個註冊表項不存在時如何跳過組件?

這是我的代碼。出於某種原因,當其他產品未安裝並且註冊表搜索出現空時,我收到錯誤,因爲找不到註冊表項。

<Property Id="PRODUCTPATH"> 
    <RegistrySearch Id="PRODUCTPATH" Root="HKLM" Key="_MY_KEY_" Name="_MY_NAME_" Type="raw" /> 
</Property> 

<SetProperty Id="PRODUCTBINPATH" Value="[PRODUCTPATH]\BIN" After="AppSearch"/> 

<Component Id="CommonDLLs" Guid="_MY_GUID_" Directory="INSTALLLOCATION"> 
    <Condition>PRODUCTPATH</Condition> 
    <RegistryValue Id="_MY_ID_" Root="HKLM" Key="_MY_KEY_2" Name="Installed" Value="1" Type="integer" KeyPath="yes" /> 
    <CopyFile Id="myfile1.dll" FileId="myfile1.dll" DestinationProperty="PRODUCTPATH" DestinationName="myfile1.dll"/> 
    <CopyFile Id="myfile2.dll" FileId="myfile2.dll" DestinationProperty="PRODUCTPATH" DestinationName="myfile2.dll"/> 
</Component> 
+3

什麼是你得到的錯誤? – Isaiah4110

+0

嘗試給予'<![CDATA [PRODUCTPATH]]>'而不是' PRODUCTPATH'。 – RinoTom

回答

0

事實上,所有你需要做的就是添加一個條件到setProperty元素是這樣的:

<Property Id="PRODUCTPATH"> 

<SetProperty Id="PRODUCTBINPATH" Value="[PRODUCTPATH]\BIN" After="AppSearch">PRODUCTPATH</SetProperty> 
0

嘗試使用UTIL:RegistrySearch代替RegistrySeach 這個元素附帶的Util擴展。如果您不知道如何使用擴展程序,請檢查here

util:RegistrySearch有一個屬性(結果),用於只檢查密鑰是否存在。

這將是這樣的:

<util:RegistrySearch 
    Id="PRODUCTPATH" 
    Variable="PRODUCTPATH" 
    Root="HKLM" 
    Key="_MY_KEY_" 
    Format="raw" 
    Result="exists"> 
相關問題