2

私はいくつかの StackOverflow スレッドを見てきました。これが一番近いです。

VS2005 と .NET 2.0 の使用に行き詰まっています。サーバーはWin2008です。R2ではありません。

VB6 アプリケーションによって変更されたデータベースから情報を読み取る C# ASP.NET Web アプリケーションを構築しています。データベース構成設定はレジストリに保存されます。

Registry.GetValue() 関数を使用していますが、null 値を返しています。

アプリケーション プールを管理者として実行すると、コードは期待値を返します。他のユーザーの場合、ToString は System.NullReferenceException をスローします。私は次のことを試しました:

  1. AppPool を使用して、次のユーザーにフル コントロールを割り当てても機能しません。
    1. NT AUTHORITY\NETWORK サービス
    2. NT AUTHORITY\SYSTEM
    3. NT AUTHORITY\ローカル サービス
    4. Administrators グループのカスタム ユーザー。
  2. ユーザーが存在しないように見えるため、IIS APPPOOL\DefaultAppPool にアクセス許可を適用できません。これは、Server 2008 の文書化された障害です
  3. 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 アプリに管理者アクセスを要求することに熱心ではありません。

4

1 に答える 1

2

現在のユーザーのキーの下で検索しています。明らかに、データは管理者のキーの下に存在しますが、他のユーザーのキーの下には存在しません。

プロファイルを持たないサービス アカウントの場合、HKEY_CURRENT_USER は HKEY_USERS.Default に解決されます。

したがって、サービス アカウントで機能させるには、値を追加する必要があります

HKEY_USERS\.Default\Software\Some\Key\Somewhere\

Administrators グループのカスタム ユーザーに対して機能させるには、それをに追加する必要があります。

HKEY_USERS\<sid>\Software\Some\Key\Somewhere\

は、カスタム ユーザーの SID です。

これは、管理者アクセスが必要なこととは関係ありません。間違った場所を見ているだけです。

データがユーザー固有でない場合は、次のように入れてみてください。

HKEY_LOCAL_MACHINE\Software\Some\Key\Somewhere\

通常、すべてのユーザーが同じ値を読み取ることができます。

于 2012-09-13T14:14:35.450 に答える