2012-08-30 19 views
0

有誰能告訴我爲什麼這不起作用嗎? 我有兩個註冊表檢查,以檢查是否的Visual C++可再分發安裝:在條件下運行自定義操作問題

<Property Id="REGDBKEYEXISTX64"> 
    <RegistrySearch Id="REGDBKEYEXISTX64" Root="HKLM" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\{837b34e3-7c30-493c-8f6a-2b0f04e2912c}" Name="Version" Type="raw" Win64="yes" /> 
</Property> 

<!--Checking if Microsoft Visual C++ Redistributables are installed on a 32-bit system--> 
<Property Id="REGDBKEYEXIST"> 
    <RegistrySearch Id="REGDBKEYEXIST" Root="HKLM" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\{837b34e3-7c30-493c-8f6a-2b0f04e2912c}" Name="Version" Type="raw" Win64="no" /> 
</Property> 

我然後運行一個自定義操作,如果他們不安裝:

<Custom Action="InstallRedistributables" After="GetVariantName">Installed OR REGDBKEYEXISTX64 OR REGDBKEYEXIST</Custom> 

安裝了可再發行然而,當它仍然運行這是我不想要的自定義操作。我知道它檢測到它,因爲這是我的日誌文件:

Property: REGDBKEYEXIST, Signature: REGDBKEYEXIST 

MSI (c) (4C:44) [12:19:04:989]: PROPERTY CHANGE: Adding REGDBKEYEXIST property. Its value is '#134276921'. 

那麼會有什麼問題呢?我已經完成了另一個自定義操作,它完美的工作,所以我真的不知道解決方案。

回答

0

看起來你的狀況是相反的。如果註冊表項存在,將設置REGDBKEYEXIST屬性,因此當搜索指示存在可再發行組件時爲true。所以你可能想要的更像NOT REGDBKEYEXIST你也可能只想在第一次安裝時運行這個(因此你可以參考Installed)。所以我會建議改變你的情況更像如下:

NOT(Installed or REGDBKEYEXIST or REGDBKEYEXISTX64) 
+0

謝謝你的工作.. :)你能解釋爲什麼它被扭轉?我做錯什麼了嗎?謝謝 –

+2

更好的問題是這個自定義操作計劃在哪裏,爲什麼他使用自定義操作來安裝redist?維克斯已燒傷處理先決條件。 –

+0

@ChristopherPainter我有它使用刻錄工作,但不熱衷於它顯示的對話框,寧願它只顯示我的MSI用戶界面,但它仍然顯示刻錄一個,這就是爲什麼我決定不使用刻錄,雖然刻錄很容易。 :) –

相關問題