我正在尝试检查计算机是否安装了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 ++ Redistributable的存在停止。在程序安装程序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-28 10:36]:安装程序中没有抛出错误,有没有更好的方法来停止安装程序表单的安装?
答案 0 :(得分:2)
您应该创建CustomAction
,然后覆盖Install
。然后,您可以通过抛出InstallException
public override void Install(System.Collections.IDictionary stateSaver)
{
if (CheckForExceptionalCondition())
throw new InstallException("Some message for user.");
base.Install(savedState);
}
然后它会在安装过程中显示一个友好的消息框并取消设置。