Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何读取注册表项c的值#_C#_Registry - Fatal编程技术网

C# 如何读取注册表项c的值#

C# 如何读取注册表项c的值#,c#,registry,C#,Registry,在我的应用程序启动时,我试图查看用户是否安装了特定版本的软件,特别是MySQL连接器,所有这些都使用c#。在注册表中,MySQL包含一个版本条目。所以我要做的就是做到这一点 我的应用程序启动了。在启动代码的某个地方,我需要按顺序执行以下操作。检查用户是否安装了MySQL连接器,该连接器位于 HKEY\u LOCAL\u MACHINE\SOFTWARE\Wow6432Node\MySQL AB\MySQL Connector/Net 如果用户安装了连接器,我想检查他们的版本,该版本存储为Name

在我的应用程序启动时,我试图查看用户是否安装了特定版本的软件,特别是MySQL连接器,所有这些都使用c#。在注册表中,MySQL包含一个版本条目。所以我要做的就是做到这一点

我的应用程序启动了。在启动代码的某个地方,我需要按顺序执行以下操作。检查用户是否安装了MySQL连接器,该连接器位于

HKEY\u LOCAL\u MACHINE\SOFTWARE\Wow6432Node\MySQL AB\MySQL Connector/Net

如果用户安装了连接器,我想检查他们的版本,该版本存储为Name=“version”和Data=x.x.x(下图)

现在,如果用户安装了特定的版本,那么我将执行其他代码,这是我可以从中获取的

最好的办法是什么

编辑:下面是我目前拥有的代码,我在第19行遇到了一个错误(有注释)。我的错误是“
error CS1001:Identifier Expected
”我无法理解这是什么意思。有什么帮助吗

using System;
using Microsoft.Win32;
using System.Data;

public class regTest
{
    public static void Main()
    {
        try
        {
            RegistryKey key = Registry.LocalMachine.OpenSubKey("Software\\Wow6432Node\\MySQL AB\\MySQL Connector\\Net");
            if (key != null)
            {
                Object o = key.GetValue("Version");
                if (o != null)
                {
                    Version version = new Version(o as String);  //"as" because it's REG_SZ...otherwise ToString() might be safe(r)
                    Version broken = new Version("6.7.4");
                    if (version.Equals.(broken)) //This is where the error is occuring
                    {
                        DataSet dataSet = ConfigurationManager.GetSection("system.data") as ystem.Data.DataSet;

                        DataView vi = dataSet.Tables[0].DefaultView;
                        vi.Sort = "Name";
                        if (vi.Find("MySql") == -1)
                        {
                            dataSet.Tables[0].Rows.Add("MySql"
                                , "MySql.Data.MySqlClient"
                                , "MySql.Data.MySqlClient"
                                ,
                                typeof(MySql.Data.MySqlClient.MySqlClientFactory).AssemblyQualifiedName);
                        }

                    }

                }
            }
        }

        catch (Exception ex)  //just for demonstration...it's always best to handle specific exceptions
        {
             //react appropriately
        }
    }
}

您需要首先使用Microsoft.Win32添加
到您的代码页

然后可以开始使用
注册表
类:

try
{
    using (RegistryKey key = Registry.LocalMachine.OpenSubKey("Software\\Wow6432Node\\MySQL AB\\MySQL Connector\\Net"))
    {
        if (key != null)
        {
            Object o = key.GetValue("Version");
            if (o != null)
            {
                Version version = new Version(o as String);  //"as" because it's REG_SZ...otherwise ToString() might be safe(r)
                //do what you like with version
            }
        }
    }
}
catch (Exception ex)  //just for demonstration...it's always best to handle specific exceptions
{
    //react appropriately
}
注意:除非您具有管理员访问权限,否则您不太可能在
本地\u机器上做很多事情。有时,即使在没有管理员权限的情况下读取值也可能是可疑操作。

更改:

using (RegistryKey key = Registry.LocalMachine.OpenSubKey("Software\\Wow6432Node\\MySQL AB\\MySQL Connector\\Net"))
致:


我已经更新了我的代码以反映您提供给我的内容,但我遇到了如上所示的问题,有什么帮助吗?去掉多余的“.”在using块中应该使用“RegistryKey”。他们实现IDisposable。@HaymoKutschbach你说得对。当我尝试此操作时,找不到RegistryKey(我使用的是Microsoft.Win32,但仍然找不到类型…),为什么要粘贴相同的内容而没有改进?最好删除此内容,因为这与OP问题无关
 using (RegistryKey key = Registry.LocalMachine.OpenSubKey("Software\Wow6432Node\MySQL AB\MySQL Connector\Net"))