2012-06-15 35 views
0

我运行的系统帐户下运行试图访问以下注册表键C#服务:在作为服务运行的注册表中访问CLSID。

\ 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 ..

任何提示,为什么将不胜感激

回答

1

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

您可以尝试使用HKEY_LOCAL_MACHINE\Software\Classes代替。

+0

那么,只是节省了我一个棚子的时间负荷。谢谢 –