在作为服务运行的注册表中访问 CLSID
本文关键字:注册表 访问 CLSID 运行 服务 | 更新日期: 2023-09-27 18:37:16
我正在运行在系统帐户下运行的 C# 服务,尝试访问以下注册表项:
''CLSID{8E7FE1EC-79FA-43DF-9452-B71542599B3C}''InProcServer32''
密钥存在,我可以在单元测试期间访问它(单元测试在当前用户下运行)。该服务可以访问类根目录中的其他键,但是当我尝试访问CLSID子项中的任何内容时,它失败了。
var regPermission = new RegistryPermission(RegistryPermissionAccess.AllAccess,
@"HKEY_CLASSES_ROOT'" + regPath);
regPermission.Demand();
using (var regKey = rootKey.OpenSubKey(regPath))
{
if (regKey != null)
{
string defaultValue = (string)regKey.GetValue("");
{
return defaultValue;
}
}
else
{
Logger.Info("Unable to open " + regPath);
}
}
对于CLSID下的任何内容,我的代码返回"无法打开"+ regPath。
任何关于为什么的提示将不胜感激
发生这种情况是因为HKEY_CLASSES_ROOT只是一个指向HKEY_CURRENT_USER'Software'Classes
的指针,当noboy登录时,嗯......那么它就不会存在。 真正的配置单元可以在 HKEY_USERS'{user_guid | .DEFAULT}'Software'Classes
下找到,因此除非您知道用户的 GUID,否则您必须使用 .违约。
您可以尝试改用HKEY_LOCAL_MACHINE'Software'Classes
。