Попросить пользователя перезапустить приложение с правами администратора, как VS отладчик - PullRequest
4 голосов
/ 25 августа 2010

Я нахожусь в процессе разработки приложения, которое использует устаревший драйвер USB.По какой-то причине разработчики устаревшего драйвера USB решили записать информацию в реестр, и этот процесс требует от меня наличия прав администратора для моего приложения.

Теперь функции USB, использующие реестр, должны выполняться пользователем только один раз или когда он хочет откалибровать свое устройство, чтобы мне не требовались административные привилегии все время.

Если вы хотите отладить приложение, которому требуются административные привилегии из Visual Studio, вы получите всплывающее окно с запросом на перезапуск приложения с правильными учетными данными.Как я могу сделать это сам?Я хочу запустить свое приложение в обычном режиме, но когда пользователь переходит в меню калибровки, я хочу представить ему аналогичное всплывающее окно, сообщающее ему, что для этого параметра он должен перезапустить приложение с правами администратора.

Ответы [ 2 ]

3 голосов
/ 25 августа 2010

Visual Studio не перезапускает себя с правами администратора, он просто определяет, работает ли он с правами администратора или нет, и, если нет, выдает окно сообщения. Самым простым тестом для вас будет вызов IsInRole - даже если вы находитесь в группе администраторов, если приложение работает без повышенных прав, оно возвращает false. Например:

        WindowsIdentity wi = WindowsIdentity.GetCurrent();
        WindowsPrincipal wp = new WindowsPrincipal(wi);

        if (wp.IsInRole("Administrators"))
        {
            MessageBox.Show("Yes, you are an Administrator.", "Is Administrator?", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
        else
        {
            MessageBox.Show("No, you are not an Administrator.", "Is Administrator?", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
    }

Вместо этих окон сообщений вы можете добавить свои собственные слова «пожалуйста, закройте и перезапустите меня». Или, если вы хотите похвастаться, дайте им кнопку для щелчка, которая запустит экземпляр с повышенными правами (используя ProcessStart и runas) и закроет этот.

3 голосов
/ 25 августа 2010

Вы можете попросить программу запустить с правами администратора, используя тип ProcessStartInfo и задав для свойства Verb значение runas.

var info = new ProcessStartInfo();
info.UseShellExecute = true;
info.Verb = "runas";
// set the rest of the information
Process.Start(info);

Это предложит пользователю стандартный диалог Windows для запуска кода администратора.

...