0

我正在运行在系统帐户下运行的 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..

关于为什么的任何提示将不胜感激

4

1 回答 1

1

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

您可以尝试HKEY_LOCAL_MACHINE\Software\Classes改用。

于 2012-06-15T18:02:02.293 回答