在作为服务运行的注册表中访问CLSID。

时间:2012-06-15 17:51:08

标签: c# registry

我正在运行在系统帐户下运行的C#服务,试图访问以下注册表项:

\ CLSID {8E7FE1EC-79FA-43DF-9452-B71542599B3C} \ InProcServer32中\

密钥存在,我可以在单元测试期间访问它(单元测试在当前用户下运行)。该服务可以访问Classes根目录中的其他键,但是当我尝试访问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 ..

任何关于为什么会受到高度赞赏的提示

1 个答案:

答案 0 :(得分:1)

这种情况正在发生,因为HKEY_CLASSES_ROOT只是指向HKEY_CURRENT_USER\Software\Classes的指针,当noboy登录时,嗯......那么它就不存在了。真正的配置单元可以在HKEY_USERS\{user_guid | .DEFAULT}\Software\Classes下找到,所以除非你知道用户的GUID,否则你将不得不使用.DEFAULT。

您可以尝试使用HKEY_LOCAL_MACHINE\Software\Classes