私はいくつかの StackOverflow スレッドを見てきました。これが一番近いです。
VS2005 と .NET 2.0 の使用に行き詰まっています。サーバーはWin2008です。R2ではありません。
VB6 アプリケーションによって変更されたデータベースから情報を読み取る C# ASP.NET Web アプリケーションを構築しています。データベース構成設定はレジストリに保存されます。
Registry.GetValue() 関数を使用していますが、null 値を返しています。
アプリケーション プールを管理者として実行すると、コードは期待値を返します。他のユーザーの場合、ToString は System.NullReferenceException をスローします。私は次のことを試しました:
- AppPool を使用して、次のユーザーにフル コントロールを割り当てても機能しません。
- NT AUTHORITY\NETWORK サービス
- NT AUTHORITY\SYSTEM
- NT AUTHORITY\ローカル サービス
- Administrators グループのカスタム ユーザー。
- ユーザーが存在しないように見えるため、IIS APPPOOL\DefaultAppPool にアクセス許可を適用できません。これは、Server 2008 の文書化された障害です。
- AppPool に管理者アカウントを使用させると、システムは機能します。
関連するコードが添付されています:
string root = "HKEY_CURRENT_USER";
string keyName = @"Software\Some\Key\Somewhere\";
string valueName = "someValue";
string fullKey = root + @"\" + keyName;
object keyValue;
try
{
keyValue = Registry.GetValue(fullKey, valueName, "Value not found.");
string val = keyValue.ToString();
return val;
}
catch (Exception ex)
{
return ex.GetType().ToString();
}
管理者として実行されていない限り、上記のコードは keyValue.ToString() の実行時に常に System.NullReferenceException を返します。System.Security.SecurityException をスローすることはありません。
Web アプリに管理者アクセスを要求することに熱心ではありません。