我已經看過幾個StackOverflow線程了。 This comes closest.爲什麼我的ASP.NET應用程序需要管理員權限從註冊表讀取?
我被困在使用VS2005和.NET 2.0。服務器是Win2008。不是R2。
我正在構建一個C#ASP.NET Web應用程序,該應用程序從VB6應用程序修改的數據庫中讀取信息。數據庫配置設置存儲在註冊表中。
我使用Registry.GetValue()函數,它返回一個空值。
如果我讓應用程序池以管理員身份運行,代碼將返回期望值。與任何其他用戶一樣,ToString引發System.NullReferenceException。我曾嘗試以下:
- 製作的應用程序池的使用和分配完全控制以下用戶不工作:
- NT AUTHORITY \ NETWORK SERVICE
- NT AUTHORITY \ SYSTEM
- NT AUTHORITY \本地服務
- 管理員組中的自定義用戶。
- 我無法將權限應用於IIS APPPOOL \ DefaultAppPool,因爲用戶似乎不存在。這是一個documented fault of 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。
我並不急於讓我的網絡應用程序需要管理員訪問權限。
誰在創建RegKey?打開註冊表並瀏覽到您的註冊碼。右鍵單擊=>准入,然後查找正確的值。 –
密鑰由管理員組擁有。管理員用戶,管理員組和SYSTEM組完全控制。 RESTRICTED組有讀取權限。如果我爲NETWORK SERVICE或任何其他帳戶添加權限,並在該用戶下運行應用程序池,則應用程序仍會失敗。它只適用於管理員。它甚至不能用作LocalSystem(SYSTEM)。 – LenPayne