2012-03-29 2 views
1

У меня есть приложение, которое в редких случаях необходимо изменить свой параметр реестра. Также во время его первого выполнения ему необходимо создать новый ключ. Я разрабатываю это в Windows 7. Я получаю ThrowUnauthorizedAccessException. Как заставить Windows дать мне приглашение UAC временно поднять мои права?В запросе приложения для повышения привилегий C# .NET

Заранее спасибо.

+1

Вы не можете поднять права доступа к уже существующему процессу. Вам нужно создать новый процесс с более высокими разрешениями. – CodesInChaos

+0

@CodeInChaos Bummer. Я действительно надеялся, что это возможно. – kmarks2

+1

Проблема заключается в том, что уровень привилегий удваивается как уровень целостности. Но для поддержки безопасного повышения уже запущенных процессов этому процессу потребуется уровень целостности самого высокого уровня, на который он мог бы подняться. Еще один ненадежный другой процесс может манипулировать вашим процессом, пока вы все еще работаете с низким уровнем целостности/разрешения. – CodesInChaos

ответ

3

Следует ли разрешить всем пользователям изменять эту настройку? Если это так, самым простым решением является изменение вашей программы установки, чтобы дать пользователямFull Control раздела реестра.

Если только администраторы должны иметь возможность изменить эту настройку, то вам нужно будет запустить еще одну копию вашей программы, попросив Windows, чтобы поднять его:

ProcessStartInfo startInfo = new ProcessStartInfo("C:\Path\To\MyApplication.exe"); 

startInfo.Verb = "runas"; //trigger a UAC prompt (if UAC is enabled) 

System.Diagnostics.Process.Start(startInfo); 

Если вы умны вы должны включить некоторую командную строку аргументы, поэтому вы можете сказать «себе», что он должен перейти прямо к той части программного обеспечения, с которой пользователю нужно иметь дело. Или ваши аргументы командной строки могли бы просто сказать, что вы хотите сделать:

ProcessStartInfo startInfo = new ProcessStartInfo(
     "C:\Path\To\MyApplication.exe", 
     "/setLoggingEnabled yes"); 

startInfo.Verb = "runas"; //trigger a UAC prompt (if UAC is enabled)  

System.Diagnostics.Process.Start(startInfo); 

Есть чек приложений для коммутатора setLoggingEnabled, внести изменения, а затем выйти.

Обновление: Общая ситуация в футболе World of Warcraft. Поскольку игре разрешено обновлять себя во время работы, всем пользователям должно быть разрешено изменять данные игры, сидя в Program Files. правильно и действуют действия для изменения списков управления доступа к папке

C:\Program Files\Blizzard\World of Warcraft 

так, что все пользователи имеют полный контроль. Фактически, перед тем, как Blizzard объединила свои усилия, Microsoft выпустила обновление совместимости приложений, которое дает всем пользователям полный контроль над WoW-папкой в ​​следующий раз при запуске в качестве администратора.

Другой распространенный случай, когда Близзард Launcher запускается с административными privelages, он обновляет ключ реестра в HKLM, запись где игра. Это происходит, когда, например, я перемещаю WoW с жесткого диска на накопитель SSD.

запускает пусковую установку один раз в качестве администратора, чтобы обновления работали правильно.

+0

Спасибо. Это как можно ближе к ответу, чем я видел. – kmarks2

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