2012-01-17 10 views
2

この問題を調査しているうちに、this質問がありました。私はプログラムがすでに管理者として実行されており、既にTRegistry.Create(KEY_READ)を使用してレジストリにアクセスしているという同じ問題を受けています。Delphi 32ビットアプリケーションWindows 7のWow64の32ビットインストーラで作成されたレジストリキーが見つかりません

私がアクセスしようとしているキーはHKLM\Software\FireBird Project\Firebird Server\Instancesです。私がそれを理解する方法(私が間違っていると私を訂正する方法)は、レジストリリダイレクタが、明示的に無効にされていない限り、HKLM \ Softwareを読み書きする任意の32ビットプロセスに対してデフォルトで有効になっていることです。

このキーでこのケースかどうかを判断する方法はありますか?私はwin32 firebirdインストーラのソースを見てきましたが、何も出ていません。

更新

!@#$%の

は、それがすべてに沿って鍵を見つけることであったが。私はファイアバードデータベースを作成できるように、このキーを使ってisqlユーティリティを探していました。これは、db接続のBeforeConnectイベントで発生していました。何らかの理由で接続が試行され、イベントがトリガーされる前に例外が発生したので、データベースは決して作成されませんでした。自己への注意:Before *イベントが何かの前に起こることは絶対に信じてはいけません。

+0

regeditでレジストリを調べる場合、 'Software'または' Software \ Wow6432Node'の下のキーですか? – Blorgbeard

+0

'Software \ Wow6432Node' –

+0

Huh。 'KEY_WOW64_32KEY'を明示的に指定してみてください。 – Blorgbeard

答えて

2

HKLM\Softwareのほとんどのキーはredirectionの対象となり、このキーはそのカテゴリに分類されます。 WOW64エミュレータで実行されている32ビットプロセスからアクセスすると、リダイレクトされます。

KEY_WOW64_32KEYを使用してレジストリの32ビットビューにアクセスするか、KEY_WOW64_64KEYを使用してレジストリの64ビットビューにアクセスします。呼び出しプロセスと同じビット数でレジストリのビューにアクセスすることはできません。

リダイレクトの影響を受けるキーの完全なリストは、Registry Keys Affected by WOW64です。

ここに提示されている表は少し読みにくいです。たとえば、Windows 7のみを考えると、HKLM\Softwareはリダイレクトされているとマークされます。ただし、いくつかのサブキーは、リダイレクトされるのではなく共有されているとマークされます。共有は、32ビットと64ビットの両方のプロセスが同じ基本データを参照することを意味します。したがって、HKLM\Softwareのすべてのサブキーがリダイレクトされるわけではありません。 HKLM\Softwareのサブキーが共有されていると示されていない場合、それはリダイレクトされます。それがあなたの鍵の場合です。


質問タイトルとコメントで、探しているキーがレジストリの32ビットビューにあることを示します。その場合、プロセスも32ビットなので、何もする必要はありません。 KEY_READでレジストリを開きます。あなたが読んでいるだけなので、管理者に昇格する必要はありません。その後、HKLM\Software\FireBird Project\Firebird Server\Instancesを読んで、Wow6432Nodeの下の32ビット表示にリダイレクタを誘導させてください。

レジストリを使用する際のゴールデンルールの1つは、絶対にあなたのアプリでWow6432Nodeをハードコードするべきではないということです。リダイレクタに作業をさせてください。

+0

他の理由から、このアプリは管理者として実行されています。上記のとおり、私は既に読み取り専用のアクセス許可でレジストリにアクセスしていますが、何らかの理由でキーを見つけることができません。レジストリの仮想化も可能ですか? –

+1

仮想化はあなたを傷つける可能性があります。あなたのアプリは仮想化されていますか?私はそれについて完全に忘れていた。私はあなたがまだ仮想化されて実行から移動していないことを教えてください! –

+0

このアプリは約20歳です。実行可能ファイルと同じフォルダに構成とデータを書き込みます(通常はルートの下の1つのレベルにあります)。管理アクセスを必要とするWinAPI関数を使用します。それはそれに属していないレジストリ設定を変更します。私たちがWindowsロゴ認定を試みた場合、それを形にするには何年もかかるでしょう。 –

関連する問題