2013-05-16 68 views
1

我已經將VS擴展從VS2010遷移到2012年,並且在通過實驗配置單元調試擴展時,它似乎爲_Config目錄創建了一個新的註冊表項,每個新的編號時間,例如:VS2012實驗配置單元11.0Exp_Config位置

HKCI\Software\Microsoft\VisualStudio\11.0Exp_Config_12944

我認爲後者爲新的devenv.exe實例的進程ID,但事實並非如此。

我有一個需要從這個配置目錄中讀取值一些自定義代碼,我用__VSSPROPID.VSSPROPID_VirtualRegistryRoot來獲取註冊表根:

object property; 
_vsShell.GetProperty((int)__VSSPROPID.VSSPROPID_VirtualRegistryRoot, out property); 
return property.ToString(); 

我只想追加「_config」的屬性值,但現在似乎不再是這種情況了。

有沒有辦法阻止VS2012實驗配置單元附加這個數字,並且只使用11.0Exp_Config,或者有沒有一種方法(API,標誌)來檢索配置註冊表根?

+1

http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.shell.interop.ilocalregistry4.getlocalregistryrootex(v=vs.90).aspx –

+0

@HansPassant謝謝,這確實解決了我問題!如果您願意,請添加您的答案,我會接受它! –

+0

你的回答對我來說很好,我無法改善它。 –

回答

3

感謝上面Hans的評論,我使用ILocalRegistry4.GetLocalRegistryRootEx解決了問題,傳入__VsLocalRegistryType.RegType_Configuration enum。

//前面的代碼刪除

編輯:經進一步調查,似乎是一個更好的辦法 - 已經這樣做了一個班,接受__VsLocalRegistryType作爲參數:VSRegistry,還可以方便返回RegistryKey

public RegistryKey ConfigRoot 
{ 
    get { return VSRegistry.RegistryRoot(__VsLocalRegistryType.RegType_Configuration); } 
}