2016-12-21 3 views
0

Я нахожусь в середине создания своего собственного киоска с использованием C#, и для этого я собираюсь убить explorer (оболочку Windows), и мне не нужно его автозапускать. По этой причине мне нужно изменить одну переменную в реестре, однако, когда я пытаюсь запустить ее из IDE, она дает мне ошибку:Невозможно изменить переменную реестра C#

System.UnauthorizedAccessException: доступ к разделу реестра% KEYPATH% отрицается.

Если я пытаюсь запустить исполняемый файл как администратор, я не получаю сообщений об ошибках, но ничего не меняется, переменная по-прежнему установлена ​​в «1». Я также редактировал разрешения для этой ветви в реестре для текущего пользователя и даже всех, предоставляя полный доступ к этой ветке в реестре. Это C# код у меня есть

RegistryKey explorerAutoRestart; 
string ear_keypath = @"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"; 

//GETTING ACCESS ERROR HERE 
explorerAutoRestart = Registry.LocalMachine.CreateSubKey(ear_keypath); 
switch (status) 
{ 
    case "0": 
     RegistryKey key = Registry.LocalMachine.CreateSubKey(@"Software\Microsoft\Windows NT\CurrentVersion\Winlogon"); 
     key.SetValue("AutoRestartShell", 0x00000000, RegistryValueKind.DWord); 
     key.Close(); 
     break; 

    case "1": 
     explorerAutoRestart.SetValue("AutoRestartShell", 1, RegistryValueKind.DWord); 
     explorerAutoRestart.Close(); 
     break; 
} 

Я хотел бы знать, что является причиной этой проблемы и как я могу изменить значение AutoRestartShell - REG_DWORD

Изменение CreateSUbKey к OpenSubKey (путь, истина) только изменилось ошибка Запрошенный доступ к реестру запрещен.

Возможно, Windows не разрешает внешнее редактирование этой ветви?

+0

ли "SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ Winlogon" уже существует? Если нет какой-либо части «ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ \ Microsoft \ Windows NT \ CurrentVersion» НЕ существует? Также, где установлен 'статус'? – ChrisF

+0

FWIW, [режим киоска] (https://technet.microsoft.com/en-us/itpro/windows/manage/set-up-a-device-for-anyone-to-use) - это вариант в Windows 10 . –

+0

Прежде всего функция OpenSubKey дает мне доступ только для чтения. Независимо от разрешений. Во-вторых, мне нужен мой киоск по различным причинам. Я планирую позже заменить оболочку. Режим окна 10 kiosk не позволяет мне иметь свою собственную форму окна с защищенным паролем MD5 и другими настраиваемыми функциями, которые я пишу, тем не менее, я проверю это. Благодаря! –

ответ

1

Удалось решить эту проблему. Видимо, мои ключи были перенаправлены WOW64 и что-то не дали мне разрешения на раздел реестра? Тем не менее следующий код спас меня:

RegistryKey localMachine = RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.LocalMachine, RegistryView.Registry64); 
      RegistryKey regKey = localMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", true); 
        regKey.SetValue("Shell", "bat.exe", RegistryValueKind.String); 
        regKey.Close(); 

Changing the Shell registry

Смежные вопросы