检查 .NET Windows 窗体应用程序的先决条件

本文关键字:先决条件 应用程序 窗体 NET Windows 检查 | 更新日期: 2023-09-27 18:17:08

我想在安装.NET Windows Form application或打开时检查第三方应用程序的安装。 我的 Windows 窗体应用程序不需要第三方应用程序运行,但它确实需要它才能使功能正常工作。 例如,"我的 Windows 窗体"应用程序打开第三方应用程序,如邮件程序。

我不知道Click Once是否是正确的策略?我需要它在安装过程中检查先决条件,如果没有,请通知用户先安装它。如果Click Once不是正确的策略,还有另一种方法吗? 也许我需要先安装我的 Windows 表单应用程序,然后在打开它时检查第三方应用程序? 问题是,安装路径可能因机器而异。 我真的不确定该怎么做。

此链接解释了如何在单击一次中包含先决条件,但这不是我想要做的。

另一个链接,讨论包括先决条件,而不仅仅是检测它们。

检查 .NET Windows 窗体应用程序的先决条件

一种可能的解决方案是使用此方法检查注册表,该方法返回 bool 值,指示具有应用程序名称的注册表记录是否存在:

public static bool IsApplictionInstalled(string p_name)
{
    string displayName;
    RegistryKey key;
    // search in: CurrentUser
    key = Registry.CurrentUser.OpenSubKey(@"SOFTWARE'Microsoft'Windows'CurrentVersion'Uninstall");
    foreach (String keyName in key.GetSubKeyNames())
    {
        RegistryKey subkey = key.OpenSubKey(keyName);
        displayName = subkey.GetValue("DisplayName") as string;
        if (p_name.Equals(displayName, StringComparison.OrdinalIgnoreCase) == true)
        {
            return true;
        }
    }
    // search in: LocalMachine_32
    key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE'Microsoft'Windows'CurrentVersion'Uninstall");
    foreach (String keyName in key.GetSubKeyNames())
    {
        RegistryKey subkey = key.OpenSubKey(keyName);
        displayName = subkey.GetValue("DisplayName") as string;
        if (p_name.Equals(displayName, StringComparison.OrdinalIgnoreCase) == true)
        {
            return true;
        }
    }
    // search in: LocalMachine_64
    key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE'Wow6432Node'Microsoft'Windows'CurrentVersion'Uninstall");
    foreach (String keyName in key.GetSubKeyNames())
    {
        RegistryKey subkey = key.OpenSubKey(keyName);
        displayName = subkey.GetValue("DisplayName") as string;
        if (p_name.Equals(displayName, StringComparison.OrdinalIgnoreCase) == true)
        {
            return true;
        }
    }
    // NOT FOUND
    return false;
}