Создание подраздела реестра Windows Net Core 8 с использованием учетной записи администратора домена выдает исключение «C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Создание подраздела реестра Windows Net Core 8 с использованием учетной записи администратора домена выдает исключение «

Сообщение Anonymous »

Я устранял неполадки в коде, который унаследовал от другого разработчика, который больше не работает в компании (см. ниже), и у меня закончились идеи о том, в чем может быть проблема. Не помешало бы несколько дополнительных глаз посмотреть на это, чтобы увидеть, что я, возможно, пропустил.
Код работал больше года, пока его не перенесли на новый хост в другом домене AD. . Новый хост, как и старый, представляет собой сервер 2016 года, присоединенный к AD, а учетные записи Windows, которые я использовал для тестирования, представляли собой учетную запись локального администратора и учетную запись администратора домена. Я получил одинаковые сообщения об ошибках, используя обе учетные записи. Единственное другое отличие, которое приходит на ум, это то, что код работал под Net Core 6 на старом хосте, а теперь на новом хосте он работает под Net Core 8. Я не читал ничего об изменениях в Net Core 8, которые бы повлияет на использование библиотеки Microsoft.Win32.
Это приложение обрабатывает файлы журналов с почтового сервера и записывает их в базу данных SQL, поэтому это его единственная функция, следовательно, настройки UAC имеют был выключен. Код пытается создать дополнительный ключ реестра в разделе HKLM\SOFTWARE\WOW6432Node. Это упрощенная версия этого кода.

Код: Выделить всё

public class TestCase
{
private const string MYAPPROOTKEY = "SOFTWARE\\WOW6432Node\\MyApp";

public TestCase()
{
// Current Windows Acct is a member of Domain Administrators and
// it is a member of the local Administrator's Group
WindowsIdentity _WindowsIdentity = WindowsIdentity.GetCurrent();

RegistryKey _HKLM = Microsoft.Win32.Registry.LocalMachine;
RegistryKey _MyAppKey = OpenSubKey(_HKLM, MYAPPROOTKEY);
if (_MyAppKey is null)
{
RegistrySecurity _RegistrySecurity =
CreateElevatedRegistryRule(_WindowsIdentity);
_HKLM.SetAccessControl(_RegistrySecurity);
// throws Exception: Attempted to perform an unauthorized operation.

RegistryKey _MyAppRootKey =
Microsoft.Win32.Registry.LocalMachine.CreateSubKey(MYAPPROOTKEY,
RegistryKeyPermissionCheck.ReadWriteSubTree, RegistryOptions.None);
// Throws Exception: Access to the registry key
// 'HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\MyApp'
// is denied.
}
}

private static RegistryKey OpenSubKey(RegistryKey p_RegistryKey, string p_SubKey)
{
RegistryKey _RegistryKey = null;
try
{
_RegistryKey = p_RegistryKey.OpenSubKey(p_SubKey, RegistryKeyPermissionCheck.ReadWriteSubTree,
RegistryRights.ReadKey
| RegistryRights.EnumerateSubKeys
| RegistryRights.QueryValues
| RegistryRights.ReadPermissions);
}
catch (System.Exception ex)
{
string _Msg = ex.Message;
System.Exception _ApplicationException = FormatExceptionMsg.PrepareApplicationException(MethodBase.GetCurrentMethod(), ex);
DebugLogger.Write(LogEventLevel.Error, _ApplicationException, _Msg);
SerilogConsoleLogger.Write(LogEventLevel.Error, _Msg);
}

return _RegistryKey;
}

private static RegistrySecurity CreateElevatedRegistryRule(WindowsIdentity p_WindowsIdentity)
{
RegistrySecurity _RegistrySecurity = null;
try
{
_RegistrySecurity = new RegistrySecurity();
_RegistrySecurity.AddAccessRule(new RegistryAccessRule(
p_WindowsIdentity.Owner,
RegistryRights.ReadKey
| RegistryRights.WriteKey
| RegistryRights.ReadPermissions
| RegistryRights.SetValue
| RegistryRights.CreateSubKey
| RegistryRights.Delete
| RegistryRights.EnumerateSubKeys
| RegistryRights.QueryValues,
InheritanceFlags.None,
PropagationFlags.None,
AccessControlType.Allow));
}
catch (System.Exception ex)
{
string _Msg = ex.Message;
System.Exception _ApplicationException = FormatExceptionMsg.PrepareApplicationException(MethodBase.GetCurrentMethod(), ex);
DebugLogger.Write(LogEventLevel.Error, _ApplicationException, _Msg);
SerilogConsoleLogger.Write(LogEventLevel.Error, _Msg);
}
return _RegistrySecurity;
}
}
Все остальное, что код делает под этими учетными записями администратора, работает нормально, поэтому я начал искать, могут ли быть проблемы с настройками контроля учетных записей пользователей. Несмотря на то, что я установил UAC на минимальное значение, это не решило проблему. Но при проверке ключей реестра для UAC есть несколько настроек, с которыми я не знаком. Я надеюсь, что кто-нибудь сможет прояснить, может ли это быть проблемой.
Параметр реестра для UAC можно найти по адресу: «SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System»
Незнакомые мне настройки и значения, которые могут быть источником этого исключения:
FilterAdministratorToken = 0EnableUIADesktopToggle = 0
ConsentPromptBehaviorAdmin = 0
ConsentPromptBehaviorUser = 3
EnableLUA = 1
Заранее благодарим за помощь.

Подробнее здесь: https://stackoverflow.com/questions/780 ... rows-denie
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»