我现在查看了几个 StackOverflow 线程。这是最接近的。
我坚持使用 VS2005 和 .NET 2.0。服务器是Win2008。不是R2。
我正在构建一个 C# ASP.NET Web 应用程序,它从由 VB6 应用程序修改的数据库中读取信息。数据库配置设置存储在注册表中。
我正在使用 Registry.GetValue() 函数,它返回一个空值。
如果我让应用程序池以管理员身份运行,代码将返回预期值。对于任何其他用户,ToString 会引发 System.NullReferenceException。我尝试了以下方法:
- 使 AppPool 使用并将完全控制权分配给以下用户不起作用:
- NT AUTHORITY\网络服务
- NT AUTHORITY\SYSTEM
- NT 当局\本地服务
- 管理员组中的自定义用户。
- 我无法对 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。
我不急于让我的网络应用程序需要管理员访问权限。