1

Windows Server 2008 でレジストリ エントリを読み取ろうとしているときに問題が発生しました。不可解なことは、コードが 2008 であるが R2 である別のサーバーで動作することです。確認したところ、レジストリ エントリが適切に配置されており、管理者としてプログラムを実行しました。以下はコードサンプルです。Registry.LocalMachine.OpenSubKey によって返されたレジストリ キーが null です。これは 64 ビット アプリケーションです

string strPath = "";
try
{
    //The registry key:
    //SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\SnmpClient.exe
    using (RegistryKey rk = Registry.LocalMachine.OpenSubKey(strKey))
    {
            try
            {
                //InstallDirectory
                if (!(rk.GetValue(strValue) == null))
                {
                    strPath += rk.GetValue(strValue).ToString();
                }
            }
            catch(Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
    }
}
catch (Exception ex)
{
    Console.WriteLine(ex.Message);
}
return strPath;
4

3 に答える 3

4

アプリを 32 ビットと 64 ビットのどちらでコンパイルするかはまだ述べていません。

アプリケーションを 32 ビット アプリケーションとしてコンパイルしている場合は、次の場所にリダイレクトされます。

HKEY_LOCAL_MACHINE\SOFTWARE\ Wow6432Node \Microsoft\Windows\CurrentVersion\App パス...

正しいキーもそこにあることを確認するか、64 ビットでコンパイルしてください。

于 2012-06-15T16:50:57.623 に答える
2

64ビットハイブを開く方法は次のとおりです。

var localMachine = RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.LocalMachine, RegistryView.Registry64);
于 2012-06-15T17:07:46.920 に答える
0

Graham Wager と Tom Brothers はどちらも、提案されたアプローチに賛成です。VS 2013 と MSTEST を使用して単体テストを実行しているときに直面した問題からの私の 2 セント:

単体テストを通じてレジストリから読み取るメソッドを実行すると、存在するレジストリ キーが常に Registry.LocalMachine.OpenSubkey(string, bool) メソッドで null として返されました。問題は、テスト設定によりデフォルトのプロセッサ アーキテクチャが X86になったため、テストを実行するとWow6432Nodeが読み取られることでした。

概要:

Windows 7 64 ビットで実行されている MSTEST を使用した VS 2013

テストが 64 ビットで実行されることを確認するには、[TEST] -> [TEST Settings] -> [Default processor architecture] に移動し、[X64] を選択します。

: Wow6432Node は、64 ビット システムで実行される 32 ビット アプリ用です。

于 2015-05-12T06:18:58.007 に答える