2012-02-09 5 views
0

x64用のC#アプリケーションを作成していますが、私の問題はです。特定のキーワードを含むいくつかのキーをレジストリで検索しています。レジストリリダイレクトのためにx64アプリケーションのレジストリ。
私はネット上でいくつかのコードを見つけましたが、パターンやキーワードを検索している間は正確なキー名がわかっていると分かりますから、実際に何をするべきか分かりません。 [DLLIMPORT( "のAdvapi32.dll"、エントリーポイント= "のRegOpenKeyEx")] パブリック静的にextern int型RegOpenKeyEx_DllImport( UIntPtr HKEY、 ストリングサブキー、 UINTオプション、 INTサムのIntPtr phkResultアウト )。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)を使用して、適切なRegistryViewを指定します。 – tyranid

+0

よかった、ありがとう!うまくいきました。あなたのコメントを正解とするにはどうすればいいですか? – trebor

+1

このトリックは 'KEY_WOW64_32KEY'定数を使用しています。将来的には、あなたの問題とは何の関係もないインターネットからのランダムなコードではなく、実際に使用しているコードを投稿することを検討してください。 –

答えて

2

は、.NET 4をターゲットにしている場合は、マネージコードで32ビットのレジストリを指定できるようにするための新しい追加があります。適切なRegistryViewを指定してOpenBaseKeyを使用します。

0

LogParserを使用してみましたか?レジストリの照会に使用する方法の例を次に示します。

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

+0

いいえ、ありがとうございますが、明らかにまだリダイレクトされています。\ HKLM \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Uninstallを検索していますが、\ HKLM \ SOFTWARE \ Wow6432Node \ Microsoft \ Windows \ CurrentVersion \ Uninstall – trebor

関連する問題