コンピューターにVC++再配布可能ファイルがインストールされているかどうかを確認しようとしています。確認するための最良の方法は、次のコードを実行することです。
bool CheckForVCRedist()
{
bool install = false;
if (!install) install = 5 == MsiQueryProductState("{196BB40D-1578-3D01-B289-BEFC77A11A1E}");
if (!install) install = 5 == MsiQueryProductState("{DA5E371C-6333-3D8A-93A4-6FD5B20BCC6E}");
if (!install) install = 5 == MsiQueryProductState("{C1A35166-4301-38E9-BA67-02823AD72A1B}");
if (!install) install = 5 == MsiQueryProductState("{F0C3E5D1-1ADE-321E-8167-68EF0DE699A5}");
if (!install) install = 5 == MsiQueryProductState("{1D8E6291-B0D5-35EC-8441-6616F567A0F7}");
if (!install) install = 5 == MsiQueryProductState("{88C73C1C-2DE5-3B01-AFB8-B46EF4AB41CD}");
return install;
}
[DllImport("msi.dll")]
private static extern int MsiQueryProductState(string product);
次のいずれかに該当する場合、プログラムは正しく実行されます。VC++再頒布可能パッケージの存在に基づいてインストーラーが停止するように調整しようとしています。プログラムインストーラーのcsファイルには、次のコードがあります。
protected override void OnBeforeInstall(IDictionary savedState)
{
if (CheckForVCRedist())
{
base.OnBeforeInstall(savedState);
}
else
{
throw new Exception("You are missing the VC ++ 2010 Redistributable. Please follow the link to get it:\nhttp://www.microsoft.com/en-us/download/details.aspx?id=5555");
}
}
これはうまくいかないようです。何かアドバイス?
編集:メソッドをオーバーライドすることが正しい方法だと思ったので、これを実行するためのカスタムアクションを設定していません...今ではそれが間違っているように感じます。
編集[2013-02-2810:36]:インストーラーでエラーがスローされていません。インストーラーフォームのインストールを停止するためのより良い方法はありますか?