2012-02-09 54 views
0

我正在寫一個針對x64的C#應用​​程序,我的問題是我正在搜索註冊表中某些包含某些關鍵字的鍵,而且我只能搜索由於註冊表重定向而導致的x64應用程序註冊表。
我試圖在網上找到一些代碼,但我真的不知道該怎麼處理它,因爲從我所瞭解的情況來看,只有當我在搜索模式或關鍵字時知道確切的鍵名稱纔有用。 [的DllImport( 「ADVAPI32.DLL」,入口點= 「RegOpenKeyEx」)] 公共靜態外部INT RegOpenKeyEx_DllImport( UIntPtr的hKey, 串子項, UINT選項, INT SAM, 出的IntPtr phkResult);從x64程序中搜索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)指定適當的RegistryView。 – tyranid 2012-02-09 21:45:38

+0

太好了,謝謝!那工作,現在我怎麼把你的評論標記爲正確答案? – trebor 2012-02-09 22:27:32

+1

訣竅是使用'KEY_WOW64_32KEY'常量。將來,請考慮發佈您正在使用的實際代碼,而不是一些與您的問題無關的隨機代碼。 – 2012-02-10 02:18:01

回答

2

如果你的目標.NET 4有一個新的除了允許你指定在託管代碼的32位註冊表。您使用OpenBaseKey指定適當的RegistryView。

0

您是否嘗試過使用LogParser?以下是如何使用它來查詢註冊表的示例。

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

+0

不,謝謝但顯然它仍然重定向我正在尋找\ HKLM \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Uninstall,但我得到\ HKLM \ SOFTWARE \ Wow6432Node \ Microsoft \ Windows \ CurrentVersion \ Uninstall – trebor 2012-02-09 22:04:39