Я просмотрел пару потоков StackOverflow. Это происходит ближайший.
Я застрял, используя VS2005 и .NET 2.0. Сервер Win2008. Не Р2.
Я создаю веб-приложение C# ASP.NET, которое считывает информацию из базы данных, измененной приложением VB6. Параметры конфигурации базы данных хранятся в реестре.
Я использую функцию Registry.GetValue(), и она возвращает нулевое значение.
Если я запускаю пул приложений от имени администратора, код возвращает ожидаемое значение. Для любого другого пользователя ToString выдает исключение System.NullReferenceException. Я пробовал следующее:
- Making the AppPool use and assigning Full Control to the following users does not work:
- NT AUTHORITY\NETWORK SERVICE
- ПОЛНОМОЧИЯ NT\СИСТЕМА
- NT AUTHORITY\LOCAL SERVICE
- Пользовательский пользователь в группе администраторов.
- Я не могу применить разрешения к IIS APPPOOL\DefaultAppPool, потому что пользователь не существует. Это задокументированная ошибка сервера 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();
}
Если он не запущен от имени администратора, приведенный выше код всегда возвращает исключение System.NullReferenceException при запуске keyValue.ToString(). Он никогда не выдает исключение System.Security.SecurityException.
Я не хочу, чтобы мое веб-приложение требовало доступа администратора.