2012-02-09 2 views
0

x64 용 C# 응용 프로그램을 작성하고 있습니다. 내 문제는 입니다. 특정 키워드 인이 들어있는 키를 레지스트리에서 검색하고 있습니다. 검색 만 가능합니다. 레지스트리 리디렉션 때문에 x64 응용 프로그램의 레지스트리
나는 그물에 어떤 부호를 찾아 낼 것을 도왔다 그러나 나는 나가 패턴 또는 키워드를 찾는 동안 나는 정확한 열쇠 이름을 알고있는 경우에만 그것이 작동하는 것을 이해하기 때문에 그것으로 무엇을 해야할지 모른다. [같이 DllImport ("advapi32.dll의"의 EntryPoint = "RegOpenKeyEx") (을 IntPtr phkResult 아웃 UIntPtr HKEY, 문자열 하위 키 UINT 옵션 INT 샘 ) 공용 static 통근 용의 INT RegOpenKeyEx_DllImport;x32 프로그램에서 x32 레지스트리 키 검색

[DllImport("advapi32.dll", EntryPoint = "RegQueryValueEx")] 
    static extern int RegQueryValueEx_DllImport(
     IntPtr hKey, 
     string lpValueName, 
     int lpReserved, 
     out uint lpType, 
     System.Text.StringBuilder lpData, 
     ref uint lpcbData); 

public string GetKeyValue(string strSubKey, string strKey) 
    { 

     UIntPtr HKEY_LOCAL_MACHINE = (UIntPtr)0x80000002; 
     const int KEY_WOW64_32KEY = 0x0200; 
     const int KEY_QUERY_VALUE = 0x1; 

     IntPtr hKeyVal; 
     uint lpType; 
     uint lpcbData = 0; 
     System.Text.StringBuilder pvData = new System.Text.StringBuilder(1024); 
     int valueRet; 



     string returnPath = String.Empty; 
     unchecked 
     { 
      try 
      { //Open the required key path 
       valueRet = RegOpenKeyEx_DllImport(HKEY_LOCAL_MACHINE, strSubKey, 0, KEY_QUERY_VALUE | KEY_WOW64_32KEY, out hKeyVal); 

       //Retreive the key value 
       valueRet = RegQueryValueEx_DllImport(hKeyVal, strKey, 0, out lpType, pvData, ref lpcbData); 

       valueRet = RegQueryValueEx_DllImport(hKeyVal, strKey, 0, out lpType, pvData, ref lpcbData); 

       returnPath = pvData.ToString(); 
      } 
      catch (Exception e) 
      { 
       throw (e); 
      } 
     } 
     return returnPath; 
    } 
+2

.net 4를 타겟팅하는 경우 관리되는 코드에 32 비트 레지스트리를 지정할 수있는 새로운 기능이 추가되었습니다. 적절한 레지스트리보기를 지정하는 OpenBaseKey (http://msdn.microsoft.com/en-us/library/microsoft.win32.registrykey.openbasekey.aspx)를 사용합니다. – tyranid

+0

위대해, 고마워! 그게 효과가있어, 내가 어떻게 당신의 코멘트를 정답으로 표시합니까? – trebor

+1

트릭이'KEY_WOW64_32KEY' 상수를 사용하고 있습니다. 앞으로는 인터넷과 관련이없는 임의의 코드가 아닌 실제 사용중인 코드를 게시하는 것이 좋습니다. –

답변

2

당신은 당신이 관리되는 코드에서 32 비트 레지스트리를 지정할 수 있도록하는 새로운 추가가 .NET 4를 대상으로하는 경우. 적절한 레지스트리 뷰를 지정하여 OpenBaseKey을 사용합니다.

0

LogParser를 사용해 보셨습니까? 다음은 레지스트리를 쿼리하는 방법에 대한 예제입니다.

https://stackoverflow.com/a/295265/977292

+0

아니요, 고맙지 만 분명히 여전히 리디렉션됩니다. \ HKLM \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Uninstall을 검색하지만 \ HKLM \ SOFTWARE \ Wow6432Node \ Microsoft \ Windows \ CurrentVersion \ Uninstall을 얻습니다. – trebor

관련 문제