C# 使用C检查特定软件

C# 使用C检查特定软件,c#,windows,installed-applications,C#,Windows,Installed Applications,我正在创建一个基本的软件,我想检查本地机器上是否有特定的软件,然后选中一个框以指示该软件在机器上。我浏览了多个线程,发现了一段很好的代码,既短又甜。但是,我无法将返回值或true或false与复选框链接。有人能告诉我是否正确使用了这个代码吗?基本上,我想在几个不同的参数下检查卸载中可用的项目列表,以涵盖我的32位和64位操作系统,在本例中,我正在搜索一款名为Symantec Encryption的软件 public static bool IsApplictionInstalled(strin

我正在创建一个基本的软件,我想检查本地机器上是否有特定的软件,然后选中一个框以指示该软件在机器上。我浏览了多个线程,发现了一段很好的代码,既短又甜。但是,我无法将返回值或true或false与复选框链接。有人能告诉我是否正确使用了这个代码吗?基本上,我想在几个不同的参数下检查卸载中可用的项目列表,以涵盖我的32位和64位操作系统,在本例中,我正在搜索一款名为Symantec Encryption的软件

 public static bool IsApplictionInstalled(string PGP)
    {
        string keyName;

        // search in: CurrentUser
        keyName = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall";
        if (ExistsInSubKey(Registry.CurrentUser, keyName, "Symantec Encryption", PGP) == true)
        {
            return true;
        }

        // search in: LocalMachine_32
        keyName = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall";
        if (ExistsInSubKey(Registry.LocalMachine, keyName, "Symantec Encryption", PGP) == true)
        {
            return true;
        }

        // search in: LocalMachine_64
        keyName = @"SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall";
        if (ExistsInSubKey(Registry.LocalMachine, keyName, "Symantec Encryption", PGP) == true)
        {
            return true;
        }

        return false;
    }


    public static bool ExistsInSubKey(RegistryKey p_root, string p_subKeyName, string p_attributeName, string PGP)
    {
        RegistryKey subkey;
        string displayName;

        using (RegistryKey key = p_root.OpenSubKey(p_subKeyName))
        {
            if (key != null)
            {
                foreach (string kn in key.GetSubKeyNames())
                {
                    using (subkey = key.OpenSubKey(kn))
                    {
                        displayName = subkey.GetValue(p_attributeName) as string;
                        if (PGP.Equals(displayName, StringComparison.OrdinalIgnoreCase) == true)
                        {
                            return true;

                        }
                    }
                }
            }
        }
        return false;
    }

    public void checkBox1_CheckedChanged(object sender, EventArgs e)
    {
        if (PGP == true)
        {
            checkBox1.Checked = true;
        }
    }
    // ------------------------------------------------------------------------------END------------------------------------------------------------------------------------------------------
    // ------------------------------------------------------------------------------END------------------------------------------------------------------------------------------------------
    // ------------------------------------------------------------------------------END------------------------------------------------------------------------------------------------------

你还没接近呢。您需要调用IsApplicationInstalled,并使用该函数的返回值

public void checkBox1_CheckedChanged(object sender, EventArgs e)
{
    checkBox1.Checked = IsApplicationInstalled(PGP);
}

不,不正确。如果IsApplicationInstalledPGP,请尝试检查:我发现此路由有错误。名称在当前上下文中不存在。@JoePearson在此代码中将Symantec Encryption替换为您的PGP变量。好的,我想我已经正确地记下了。不过,我知道我没有疯。Symentec加密是在注册表项中搜索的字符串。是否正确?如果它存在并且是三个查询中的任何一个,那么它会将var PGP返回为true?它会检查注册表中的各个位置,试图找到一个名为Symantec Encryption的项,然后尝试将该项的值与PGP变量中的任何值相匹配。如果可以在任意一个键中找到PGP变量内容的匹配项,则返回true;如果所有三个键都失败,则返回false。今后,我强烈建议您在尝试使用互联网上的代码之前先了解它的功能。@Ken White,尽管我非常感谢您的反馈,但我对上述代码的理解是正确的。在评论之前,请花时间理解这一点。很抱歉,C不是我的主要语言,我正在尝试为一个项目拼凑一个简单的脚本,没有时间仅仅为这个项目刷新对该语言的一个非常古老和基本的理解。