D2007 32bitアプリから64ビットのRegistryアクセス

解決


cocomo  2012-03-27 08:04:57  No: 41845

Delphi2007 ent(32bit) + Windows7 64bit で開発をしています。
64ビットと32ビットのレジストリは別々で持っているようです。
64ビット:regedit
32ビット:%systemroot%\syswow64\regedit -m
http://support.microsoft.com/kb/305097/ja

D2007からTRegistryを使って64bitレジストリを取得したいのですが、
TRegistry.OpenKeyReadOnlyで行うと32bitのレジストリしか取れません。
D2007にも、XE2にも64bitレジストリを開く為のプロパティが存在しないのですが、
皆さんはどのようにしているのでしょうか?
windows.pas の KEY_WOW64_RES = $0300; ではレジストリ両方見に行くようですが。

var
  Registry:TRegistry;
  KeyName:string;
  ReadStr:String;
  Ret : String;
begin
  Registry :=TRegistry.Create;
  try
    Registry.RootKey := HKEY_LOCAL_MACHINE;

    //64bit App
    KeyName := 'SOFTWARE\WinRAR';
    ReadStr := 'exe64';

    //32bit app
    //KeyName := 'SOFTWARE\Adobe\Acrobat Reader\10.0\Language';
    //ReadStr := 'UI';

    Registry.OpenKey(KeyName,False);
    Ret :=Registry.ReadString(ReadStr);
    ShowMessage(Ret);
  finally
    Registry.Free;
  end;

D2007 32bit 結果あり 64bit 結果空白
XE2体験版  32bit 結果空白 64bit 結果空白

TRegistryを使っている方がおられましたら、教えてください。


Nov  2012-03-27 09:07:51  No: 41846

試してませんが、
// KEY_WOW64_64KEY = $200
Registry := TRegistry.Create(任意のアクセス or KEY_WOW64_64KEY);
では。
参考:http://msdn.microsoft.com/ja-jp/library/aa384232(v=vs.85).aspx


Nov  2012-03-27 09:09:43  No: 41847

間違えました。
KEY_WOW64_64KEY = $100
が正解。


cocomo  2012-03-27 10:40:13  No: 41848

Novさんこんにちは。
Registry := TRegistry.Create(任意のアクセス or KEY_WOW64_64KEY);
でアクセスすることができました。
KEY_WOW64_32KEY        = $0200;
KEY_WOW64_64KEY        = $0100;

KEY_WOW64_RES          = $0300; これは勝手に両方見に行くと勘違いしていたようです。
ありがとうございました。


cocomo  2012-03-27 10:40:53  No: 41849

解決です。


※返信する前に利用規約をご確認ください。








  このエントリーをはてなブックマークに追加