c# - 根据条件停止安装

标签 c# .net-4.0 setup-project

我正在尝试检查计算机是否安装了 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]:错误没有在安装程序中抛出,有没有更好的方法来停止安装程序的安装?

最佳答案

你应该创建一个 CustomAction然后覆盖 Install。然后你可以通过抛出 InstallException 来取消设置。

public override void Install(System.Collections.IDictionary stateSaver)
{
    if (CheckForExceptionalCondition())
        throw new InstallException("Some message for user.");

    base.Install(savedState);
}

然后它会在安装过程中显示一个友好的消息框并取消设置。

enter image description here

关于c# - 根据条件停止安装,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15137384/

相关文章:

c# - 从具有约束的数据库中随机选择数据

visual-studio-2010 - 在安装项目中使用 SlowCheetah 的 app.config 转换

c# - 如何将所有引用的 DLL 移动到 C# 中的单独文件夹中?

c# - 如何检测证书的类型(A1 或 A3)?

android - 新的 Android 'hello, world' 项目没有通过标准的 Lint 测试

c# - 如何使用 LINQ 从 Asp.Net 配置文件属性中查询

c# - 如何从 TFS 获取构建定义?

c# - ASP .NET Core 在部分 View 中卡住加载 View 组件

c# - App.Config 错误 "Configuration system failed to initialize"

sharepoint - 我可以在 SharePoint 2007 中使用 .NET 4 吗?