gpt4 book ai didi

c# - 不允许请求的注册表访问 #2

转载 作者:行者123 更新时间:2023-11-30 15:01:22 24 4
gpt4 key购买 nike

我最近一直在编写一个需要访问以下注册表项的应用程序:

HKLM\SOFTWARE\Wow6432Node\Classes\CLSID

出于某种奇怪的原因,在我测试过的任何系统上都不允许我访问此 key 。我正在使用管理权限和介于两者之间的所有权限来尝试完成此操作。我搜索了前 5 个 Google 结果页,但仍然是空的。

注意事项:

1. 我尝试删除的键可能包含也可能不包含子键,我已经彻底测试了“DeleteSubKey”和“DeleteSubKeyTree”。

2. 我试过 OpenSubKey("Key",True),false 和 true 值仍然不允许我访问。

3. 我也不允许访问非 64 位位置 (HKLM\Software\Classes\CLSID)。

4. 我已经在 XP、7 和 8 上对此进行了测试。XP 没有给我带来问题。

5. 我收到的确切错误可以在下面找到:

Requested registry access is not allowed. at Microsoft.Win32.RegistryKey.OpenSubKey(String name, Boolean writable)



请帮助我..这几天一直在折磨我。非常感谢任何帮助。

最佳答案

   Microsoft.Win32.RegistryKey m_RegEntry = Microsoft.Win32.Registry.LocalMachine;    
m_RegEntry = m_RegEntry.OpenSubKey(@"SYSTEM\CurrentControlSet\Control\Class\{4D36E96D-E325-11CE-BFC1-08002BE10318}");
//string
int i = 0;
string[] m_szModemEntries = m_RegEntry.GetSubKeyNames();

这会返回许多连接设备到 COM 端口的条目。以及我们不需要访问的“属性”条目。

下面我附上了一个简单的代码来使用它。

            string[] m_szModem;
Microsoft.Win32.RegistryKey m_RegEntry = Microsoft.Win32.Registry.LocalMachine;
m_RegEntry = m_RegEntry.OpenSubKey(@"SYSTEM\CurrentControlSet\Control\Class\{4D36E96D-E325-11CE-BFC1-08002BE10318}");
//string
int i = 0;
string[] m_szModemEntries = m_RegEntry.GetSubKeyNames();
m_szModem = new string[m_szModemEntries.Length];
string m_szModemPort = null;
string m_szModemName = null;
foreach (string m_szModemEntry in m_szModemEntries)
{
if (!IsNumber(m_szModemEntry))
{
}
else
{
m_RegEntry.Close();
m_RegEntry = Microsoft.Win32.Registry.LocalMachine;
string m_szKeyName = @"SYSTEM\CurrentControlSet\Control\Class\{4D36E96D-E325-11CE-BFC1-08002BE10318}\" + m_szModemEntry;
m_RegEntry = m_RegEntry.OpenSubKey(m_szKeyName);
m_szModemPort = m_RegEntry.GetValue("AttachedTo").ToString();
m_szModemName = m_RegEntry.GetValue("Model").ToString();
if (m_szModemName.Contains("<device name>"))
{
CommPort = m_szModemPort;
lbldevicename.Text = "Device connected!";
lbldevicename.ForeColor = Color.Green;
cmdProgram.Enabled = true;
DeviceConnected = true;
break;
}
CommPort = "";
cmdProgram.Enabled = false;
lbldevicename.Text = "Device not connected!";
lbldevicename.ForeColor = Color.Red;
DeviceConnected = false;
}
}

//和IsNumber函数

public Boolean IsNumber(String s)
{
foreach (Char ch in s)
{
if (!Char.IsDigit(ch)) return false;
}
return true;
}

关于c# - 不允许请求的注册表访问 #2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14411850/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com