2013-05-16 2 views
1

실험실 하이브를 통해 확장 프로그램을 디버깅 할 때 VS20010의 VS 확장 프로그램을 오늘 마이 그 레이션했는데 _config 디렉토리에 새 레지스트리 항목을 만들 때마다 시간, 예를 들면 : HKCI\Software\Microsoft\VisualStudio\11.0Exp_Config_12944VS2012 실험 하이브의 11.0Exp_Config 위치

나는 나중에 새로운으로 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 열거 형을 전달하여 문제를 해결할 수있었습니다. 추가 조사시는, 훨씬 더 나은 방법이있을 것 같다 - 매개 변수로 __VsLocalRegistryType 받아들이는 이미이 작업을 수행하는 클래스 :

가 // 앞의 코드는

편집 삭제 VSRegistry을, 또한 편리 RegistryKey를 반환 :

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