ホームページ > バックエンド開発 > C++ > 32 ビット .NET アプリケーションから 64 ビット レジストリ キーにアクセスするにはどうすればよいですか?

32 ビット .NET アプリケーションから 64 ビット レジストリ キーにアクセスするにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2025-01-16 19:16:10
オリジナル
790 人が閲覧しました

How to Access 64-bit Registry Keys from a 32-bit .NET Application?

32 ビット .NET アプリケーションから 64 ビット レジストリ エントリへのアクセス

64 ビット Windows システム上で実行されている 32 ビット アプリケーションから 64 ビット レジストリにアクセスするには、特定のアプローチが必要です。 幸いなことに、.NET Framework 4.x 以降のバージョンでは、これに対する組み込みサポートが提供されています。

64 ビット レジストリ アクセスに RegistryView を活用する

RegistryView 列挙は、32 ビットと 64 ビットのレジストリ アクセスを区別するための鍵となります。 使用方法は次のとおりです:

<code class="language-csharp">// Access the 64-bit registry
using Microsoft.Win32;

RegistryKey localKey64 = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64);
RegistryKey sqlServerKey64 = localKey64.OpenSubKey(@"SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL");

// Access the 32-bit registry
RegistryKey localKey32 = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32);
RegistryKey sqlServerKey32 = localKey32.OpenSubKey(@"SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL");</code>
ログイン後にコピー

特定のレジストリ値の取得

「Instance NamesSQL」キーの「SQLEXPRESS」などの特定の値を取得するには、次を使用します。

<code class="language-csharp">string sqlExpressKeyName = (string)sqlServerKey64.GetValue("SQLEXPRESS");</code>
ログイン後にコピー

包括的なキーの取得: 32 ビットと 64 ビットの結果を組み合わせる

32 ビットと 64 ビットの両方のレジストリの場所からのデータが必要な場合は、クエリを組み合わせた方が有益です。

<code class="language-csharp">using System.Linq;

IEnumerable<string> GetAllRegValueNames(string regPath)
{
    var reg64 = GetRegValueNames(RegistryView.Registry64, regPath);
    var reg32 = GetRegValueNames(RegistryView.Registry32, regPath);
    var result = (reg64 != null && reg32 != null) ? reg64.Union(reg32) : (reg64 ?? reg32);
    return (result ?? new List<string>().AsEnumerable()).OrderBy(x => x);
}</code>
ログイン後にコピー

GetRegValueNames は、指定されたキーの下にある値の名前を取得するヘルパー関数 (図示されていませんが、簡単に実装できます) です。 regPath はレジストリ パスを指定します。

使用例:

<code class="language-csharp">
var sqlRegPath = @"SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL";
foreach (var keyName in GetAllRegValueNames(sqlRegPath))
{
    Console.WriteLine(keyName);
}
```  This iterates through all found keys, regardless of whether they reside in the 32-bit or 64-bit registry hive.</code>
ログイン後にコピー

以上が32 ビット .NET アプリケーションから 64 ビット レジストリ キーにアクセスするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート