このWindowsレジストリへのアクセス試行から、nullが返されます。
using (RegistryKey registry = Registry.LocalMachine.OpenSubKey(keyPath))
keyPathはSOFTWARE\\TestKey
キーはレジストリにあるので、なぜローカルコンピュータハイブの下に見つからないのですか?
Danaへのコメントで、ASP.NETアカウントにアクセス権を与えたと述べました。しかし、サイトが実行されているアカウントであることを確認しましたか?偽装と匿名アクセスのユーザーは見落としがちです。
テストされていないコード:
Response.Clear();
Response.Write(Environment.UserDomainName + "\\" + Environment.UserName);
Response.End();
64ビットマシンを使用している場合に発生する可能性があります。最初にヘルパークラスを作成します(.NET 4.0以降が必要です):
public class RegistryHelpers
{
public static RegistryKey GetRegistryKey()
{
return GetRegistryKey(null);
}
public static RegistryKey GetRegistryKey(string keyPath)
{
RegistryKey localMachineRegistry
= RegistryKey.OpenBaseKey(RegistryHive.LocalMachine,
Environment.Is64BitOperatingSystem
? RegistryView.Registry64
: RegistryView.Registry32);
return string.IsNullOrEmpty(keyPath)
? localMachineRegistry
: localMachineRegistry.OpenSubKey(keyPath);
}
public static object GetRegistryValue(string keyPath, string keyName)
{
RegistryKey registry = GetRegistryKey(keyPath);
return registry.GetValue(keyName);
}
}
使用法:
string keyPath = @"SOFTWARE\MyApp\Settings";
string keyName = "MyAppConnectionStringKey";
object connectionString = RegistryHelpers.GetRegistryValue(keyPath, keyName);
Console.WriteLine(connectionString);
Console.ReadLine();
それを変更するだけです
using (RegistryKey registry = Registry.LocalMachine.OpenSubKey(keyPath))
に
using (RegistryKey registry = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Default).OpenSubKey(keyPath))
(RegistryKey
の代わりにRegistry
を使用し、RegistryView
を追加して、Hive-Local Machineをメソッドパラメーターとして配置します。)