首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据条件停止安装

根据条件停止安装
EN

Stack Overflow用户
提问于 2013-02-28 21:59:55
回答 1查看 1.1K关注 0票数 3

我正在尝试检查计算机是否安装了VC++ redistributable,我找到的检查它的最佳方法是运行以下代码:

代码语言:javascript
复制
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文件中有以下代码:

代码语言:javascript
复制
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");
    }
}

这似乎不管用。有什么建议吗?

编辑:我没有设置一个自定义操作来运行它,因为我认为重写这个方法是正确的方法……我现在觉得这是错误的。

Edit2013-02-28 10:36:安装程序没有抛出错误,有没有更好的方法停止安装程序的安装?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-05 08:38:20

您应该创建一个CustomAction,然后覆盖Install。然后您可以通过抛出InstallException来取消安装

代码语言:javascript
复制
public override void Install(System.Collections.IDictionary stateSaver)
{
    if (CheckForExceptionalCondition())
        throw new InstallException("Some message for user.");

    base.Install(savedState);
}

然后它会在安装期间显示一个友好的消息框,并取消安装。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15137384

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档