Перезапустить программу без изменений - PullRequest
7 голосов
/ 18 июля 2011

По какой-то причине мою программу на C # необходимо перезапустить с повышенными привилегиями.Для этого я использую следующий код:

private static void RestartForPermissionsFix()
{
    ProcessStartInfo processInfo = new ProcessStartInfo();
    processInfo.Verb = "runas";
    processInfo.FileName = Assembly.GetExecutingAssembly().Location;

    Process.Start(processInfo);
}

Это прекрасно работает.

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

Ответы [ 2 ]

9 голосов
/ 18 июля 2011

Чтобы запустить процесс со средней целостностью из процесса с высокой степенью целостности, я полагаю, вам необходимо получить токен текущего процесса, используя OpenProcessToken, продублировать его, удалить SID высокой целостности изиспользуя токен SetTokenInformation, а затем используйте этот токен для создания нового процесса, используя CreateProcessAsUser.Это будет похоже на в этом примере , за исключением того, что вместо добавления идентификатора безопасности с низким уровнем целостности необходимо удалить код с высоким уровнем целостности.Примечание: я не проверял это, поэтому я не уверен на 100%, что это будет работать.

Я предлагаю вам оставить исходный невыработанный процесс запущенным и дождаться завершения его повышенного аналога (например, используяProcess.WaitForExit).Как только это закончится, оно может продолжаться без изменений, как раньше.Это было бы намного проще и надежнее.

1 голос
/ 18 июля 2011

У меня была та же проблема с приложением, которое я хотел обновить автоматически (программе обновления требуются повышенные привилегии).

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

Затем я встроил .exe в мое основное приложение и запустил .exe непосредственно перед тем, как покинуть свое приложение, когда я обновляю его.

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