32 ビット Windows アプリケーションから 64 ビット レジストリへのアクセス
チャレンジ:
32 ビット アプリケーションは、64 ビット Windows システム上の 64 ビット レジストリにアクセスするのが困難になります。この問題は、64 ビットのビルド サーバー上で実行されている 32 ビットの単体テストから、SQL Express インスタンスへのパスなど、64 ビットのレジストリに存在するシステム情報にアクセスするときによく発生します。
解決策:
64 ビット レジストリへのアクセス:
RegistryView.Registry64
プロパティは、32 ビット アプリケーションから 64 ビット レジストリにアクセスするためのソリューションを提供します。 次のコードはこれを示しています:
<code class="language-csharp">RegistryKey localKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64); RegistryKey sqlServerKey = localKey.OpenSubKey(@"SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL"); string sqlExpressKeyName = (string)sqlServerKey.GetValue("SQLEXPRESS");</code>
32 ビット レジストリへのアクセス:
逆に、32 ビット レジストリにアクセスするには、RegistryView.Registry32
:
<code class="language-csharp">RegistryKey localKey32 = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32); RegistryKey sqlServerKey32 = localKey32.OpenSubKey(@"SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL"); string sqlExpressKeyName = (string)sqlServerKey32.GetValue("SQLEXPRESS");</code>
重要な考慮事項:
RegistryView.Registry32
を使用することが推奨される、より直接的なアプローチです。RegisteredOrganization
値が誤って「Microsoft」を返す可能性があります。 64 ビット コードは正しい構成を返します。GetAllRegValueNames()
関数を使用すると、レジストリ ビュー (32 ビットまたは 64 ビット) に関係なく、すべてのキーの名前と値を取得できます。??
) を利用して、潜在的な null 値を適切に処理します。以上が32 ビット アプリケーションは Windows の 64 ビット レジストリにどのようにアクセスできますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。