2015-09-24 54 views
1

無法打開註冊表子項即使我嘗試在兩個位置都打開 - x64和x32 ​​註冊表。我試圖獲取登錄到Visual Studio用戶的用戶名。無法打開註冊表子項

@"Software\Microsoft\VisualStudio\12.0\ConnectedUser\IdeUser\Cache" 

無法看到IdeUser,但緩存返回null。

const string SubKey = @"Software\Microsoft\VisualStudio\12.0\ConnectedUser\IdeUser\Cache"; 
const string EmailAddressKeyName = "EmailAddress"; 
const string UserNameKeyName = "DisplayName"; 

RegistryKey localMachineRegistry64 = RegistryKey.OpenBaseKey(RegistryHive.CurrentUser, RegistryView.Registry64); 
RegistryKey reg64 = localMachineRegistry64.OpenSubKey(SubKey, false); 

if (reg64 != null) 
{ 
    return reg64.GetValue(SubKey, true).ToString(); 
} 

//Check the 32-bit registry for "HKEY_LOCAL_MACHINE\SOFTWARE" if not found in the 64-bit registry: 
RegistryKey localMachineRegistry32 = RegistryKey.OpenBaseKey(RegistryHive.CurrentUser, RegistryView.Registry32); 
RegistryKey reg32 = localMachineRegistry32.OpenSubKey(SubKey, false); 

if (reg32 != null) 
{ 
    return reg32.GetValue(SubKey, true).ToString(); 
} 
+1

聽起來像註冊表上的安全限制。你有沒有嘗試提升你的主機應用程序的權限?你還可以發佈你的代碼是'失敗' – DotNetHitMan

+0

你好,請看我的意見如下/ – Vnuuk

+0

是的,這不是一個答案。但DotNetHitMan要求我提供一個例子。我不能在評論中放置太多代碼 - 只能在帖子中。 – Vnuuk

回答

1

我測試了你的代碼,它的工作原理與我所期望的一樣。我可以訪問SubKey。 *注意我以管理員身份運行VS。 (右鍵單擊VS exe並以管理員身份運行,我也是本地管理員,我的開發機器,所以我有不受限制的註冊表訪問)。

但是,您的代碼有一點有趣,因爲您實際上並沒有通過調用GetValue(SubKey,true)來訪問註冊表中的值,在我的示例中我相應地進行了更改。

const string SubKey = @"Software\Microsoft\VisualStudio\12.0\ConnectedUser\IdeUser\Cache"; 
const string EmailAddressKeyName = "EmailAddress"; 
const string UserNameKeyName = "DisplayName"; 

RegistryKey localMachineRegistry64 = RegistryKey.OpenBaseKey(RegistryHive.CurrentUser, RegistryView.Registry64); 
RegistryKey reg64 = localMachineRegistry64.OpenSubKey(SubKey, false); 

if (reg64 != null) 
{ 
    //******** This is just an example of getting the user name and email. 
    //get user name and email from the selected sub key. 
    var userName = reg64.GetValue(UserNameKeyName, String.Empty).ToString(); 
    var emailAddress = reg64.GetValue(EmailAddressKeyName, String.Empty).ToString(); 
    //return a bool and pass back the userName and email as out parms? 
    return true; 
} 

希望這會有所幫助。

編輯 -

如果註冊表訪問仍然是可以監視通過將procmon從sysinternals註冊表訪問的問題。

+0

這很有趣..我以管理員身份運行了visual studio,但仍然對gegistry關鍵字爲null。 – Vnuuk

+0

@Vnuuk好吧你用procmon測試過註冊表訪問嗎? – DotNetHitMan