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

У меня есть программа, которая должна работать как обычный пользователь большую часть времени, но время от времени мне нужно останавливать и запускать службу. Как мне создать программу, которая в большинстве случаев будет работать как обычный пользователь, но для какой-то функции перейдет в режим администратора?

Ответы [ 3 ]

2 голосов
/ 20 ноября 2008

Вы не можете повысить уровень процесса после его запуска, но вы можете либо: -

Перезапустите процесс с повышенными правами

private void elevateCurrentProcess()
{
    ProcessStartInfo startInfo = new ProcessStartInfo();
    startInfo.UseShellExecute = true;
    startInfo.WorkingDirectory = Environment.CurrentDirectory;       
    startInfo.FileName = Application.ExecutablePath;
    startInfo.Verb = "runas";

    try
    {
        Process p = Process.Start(startInfo);
    }
    catch
    {
        // User didn't allow UAC
        return;
    }
    Application.Exit();
}

Этот метод означает, что ваш процесс продолжает работать с повышенными правами, и больше не выдается UAC - как хорошая, так и плохая вещь, зависит от вашей аудитории.

Поместите код, требующий повышения, в отдельный exe

Установите манифест как requireAdministrator и запустите его как отдельный процесс. Посмотрите этот пример кода

Этот метод означает приглашение UAC при каждом запуске операции.

Лучший метод зависит от вашей аудитории (типы администраторов или нет) и частоты повышенных операций.

1 голос
/ 30 октября 2008

Насколько я знаю, вам нужно запустить отдельный процесс, который запускается от имени администратора. Вы не можете повысить эффективность процесса, если он уже запущен.

См. этот вопрос .

0 голосов
/ 30 октября 2008

Вам нужно использовать то, что называется олицетворением ..

[http://support.microsoft.com/kb/306158][1]

Выше показано, как это будет сделано для приложения ASP.Net, но код, вероятно, почти идентичен для ваших нужд.

...