Запрет кодов реестра от требования администратора - PullRequest
2 голосов
/ 30 марта 2012

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

RegistryKey startupapp = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);
startupapp.SetValue("App", "\"" + Assembly.GetExecutingAssembly().Location + "\"" +" -start");

Но проблема в том, что реестр добавляется только тогда, когда я запускаю свое приложение какадминистратор.Можно ли как-то избежать этой вещи, чтобы мое приложение могло добавлять / удалять записи реестра для запускаемого приложения?

Ответы [ 2 ]

6 голосов
/ 30 марта 2012

Это потому, что HKLM требует прав администратора для записи. HKCU этого не требует.

RegistryKey startupapp = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);

startupapp.SetValue("App", "\"" + Assembly.GetExecutingAssembly().Location + "\"" +" -start");
1 голос
/ 30 марта 2012

Поскольку вы хотите настроить приложение на запуск для всех пользователей, нет , вы не можете обойтись, требуя какой-то доступ администратора.

Почему это так?Ну, в качестве мысленного эксперимента, скажем, Windows позволяла приложениям запускать программы при запуске, не требуя пароля администратора.Но это побьет цель многих улучшений безопасности в Vista, с введением UAC и появлением учетных записей без прав администратора по умолчанию.Пользователь мог загрузить игру, которая на самом деле была трояном, и игра могла настроить некоторые вредоносные программы для запуска при запуске для всех пользователей, причем все без необходимости запроса UAC.Следовательно, Windows не позволяет настроить запуск программы без прав администратора.

Существуют некоторые приемы, которые можно использовать, чтобы потребовать от пользователя запуска всей вашей программы .хотя как администратор.Моя первая идея состоит в том, чтобы иметь вторую программу, единственная задача которой - настроить основную программу для запуска при запуске и запустить ее с параметром ProcessStartInfo.Verb = "runas" (при условии, что вы используете System.Diagnostics.Process чтобы запустить новый процесс), чтобы вспомогательная программа работала от имени администратора, но ваше общее приложение можно запустить без приглашения UAC.


РЕДАКТИРОВАТЬ : в ответ на ваш комментарий

Да, если вам нужно только запустить программу при запуске для одного пользователя, у вас есть гораздо больше возможностей.Как описывает эта статья О'Рейли , одним из вариантов является запись в HKCU \ Software \ Microsoft \ Windows \ CurrentVersion \ Run для настройки запуска программы при запуске для текущего пользователя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...