试图将注册表值转换为字符串,但有一些错误

时间:2018-03-03 22:48:14

标签: c# string winapi registry hwid

我尝试了很多方法将值转换为String,因此我的工具集的一部分我制作了一个表单,告诉你你的HWID HardWare ID。我找到了包含值的注册表。

  

HKEY_LOCAL_MACHINE \ SYSTEM \ ControlSet001 \ Control \ IDConfigDB \ Hardware Profiles \ 0001“\ HwProfileGuid”

- >这给出了长测试字符串

我想在一个标签上发现我已经尝试了所有我知道但没有工作的方法 我尝试的最新一个是

  

Microsoft.Win32.RegistryKey key3;
  key3 =“HKEY_LOCAL_MACHINE \ SYSTEM \ ControlSet001 \ Control \ IDConfigDB \ Hardware Profiles \ 0001 \ HwProfileGuid2”;

所以这是我的代码:

string regg = (string)key3.GetValue("");
label2.Text = regg;

我在这里获得了代码表格

但它出错了:

  

无法将类型'string'隐式转换为'Microsoft.Win32.RegistryKey'

我现在在谷歌看了些什么,但他们总是在谈论其他事情。不管我怎么试,都给了一些错误。我只想在按钮上单击标签上显示HWID值。

我正在使用C#Visual Studio 2017。

我甚至尝试过

try
            {

                label2.Text = Registry.LocalMachine.OpenSubKey("SYSTEM\\ControlSet001\\Control\\IDConfigDB\\Hardware Profiles\\0001\\", true).GetValue("HwProfileGuid");

            }
            catch(Exception ex)
            {

            }

现在说: 无法将类型'object'隐式转换为'string'。存在显式转换(您是否错过了演员?)

1 个答案:

答案 0 :(得分:0)

  

无法隐式转换类型'字符串'至   ' Microsoft.Win32.RegistryKey'

导致因为您的key3变量被声明为RegistryKey,并且您尝试将字符串放入其中,而不是将其分配给OpenSubKey方法的结果。将该字符串放在括号中,删除HKEY_LOCAL_MACHINE \并将" Registry.LocalMachine.OpenSubKey"在左括号之前。

key3将是一次性的,所以把它放在'使用'块。

我无法从此处访问Windows注册表,但是如果 HwProfileGuid是密钥的名称,然后您的GetEntry("")是读取'默认值'的方法,这是正确的。但是,如果HwProfileGuid是值的名称,则删除该值和尾部反斜杠,并将HwProfileGuid放在GetEntry的引号内。

下一点是值的类型可能不是字符串。 (再次......我没有注册表,所以无法检查)如果将GetValue的结果存储在一个对象(而不是一个字符串)中,那么你可以通过调试器进行操作,它会告诉你是什么类型。

这是阅读注册表项的一个很好的例子...... https://stackoverflow.com/a/18234755/5198140