WiX インストーラー用のブートストラップを作成しようとしています。VC++ 2013 再頒布可能パッケージをインストールする必要があります (x86 および x64 プラットフォーム用)。また、これらのパッケージが既にインストールされている場合は、それらのインストールをスキップしたいと考えています。そのために、各パッケージの product.xml に次の要素を追加します。
<InstallChecks>
<MsiProductCheck
Property="IsMsiInstalled"
Product="{?????????????????????????}"/>
</InstallChecks>
<Commands>
<Command PackageFile="vcredist_2013_x86.exe">
<InstallConditions>
<BypassIf Property="IsMsiInstalled" Compare="ValueGreaterThan" Value="0"/>
問題は、どの製品コードが必要かということです。
Google が私を助けてくれなかった後、vcredist_2013_x86.exe を抽出して msi ファイルのプロパティを調べようとしましたが、それは別の問題でした。7Zipを使用して抽出した後、「0」、「u0」、「u1」、「u2」などの奇妙な名前のファイルの束しか得られませんでした。ファイル「0」はBurnマニフェストであることが判明しました。製品コード: for x86:{13A4EE12-23EA-3371-91EE-EFB36DDFFF3E}
および for x64:が含まれてい{A749D8E6-B613-3BE3-8F5F-045C84EBA29B}
ました。だから私はそれらを使用しようとしましたが、運がありませんでした。MsiProductCheck
パッケージがインストールされているにもかかわらず、-1 を返しました。
次に、HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall レジストリ キーでどのような変更が発生するかを調べました (私は Win8.1 で作業しています)。インストール時に追加され、アンインストール後に削除されるキーは{ce085a78-074e-4823-8dc1-8a721b94b76d}
、x86 と{7f51bdb9-ee21-49ee-94d6-90afc321780e}
x64 で異なります。しかし、彼らもうまくいきませんでしたMsiProductCheck
。インストールしても結果は -1 (不明な製品) のままでした。
だから私は今、絶望しています。私が持っている唯一のアイデアは、RegistryCheck
代わりに使用MsiProductCheck
して、アンインストールでキーを確認することです。しかし、ここで何が問題なのか知りたいです。VC++ 2013 再頒布可能パッケージには、どの製品コードを使用する必要がありますか? パッケージのインストール中に追加されたキーだけが で機能しないのはなぜMsiProductCheck
ですか?