0

これがうまくいかない理由を誰か教えてください。Visual C++ 再頒布可能パッケージがインストールされているかどうかを確認するために、次の 2 つのレジストリ チェックがあります。

<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'.

では、何が問題になるのでしょうか?これを別のカスタムアクションで実行しましたが、完全に機能するため、解決策が本当にわかりません。

4

1 に答える 1

0

あなたの状態が逆転しているようです。レジストリ キーが存在する場合はREGDBKEYEXISTプロパティが設定されるため、再配布可能ファイルが存在することが検索で示された場合は true になります。したがって、おそらくNOT REGDBKEYEXISTあなたが望むのは、おそらく初回インストール時にのみこれを実行したいということです(したがって、 への参照Installed)。したがって、条件を次のようなものに変更することをお勧めします。

NOT(Installed or REGDBKEYEXIST or REGDBKEYEXISTX64)
于 2012-08-30T11:46:42.837 に答える