Выполнение процесса обычно от повышенного - PullRequest
2 голосов
/ 09 февраля 2010

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

Ответы [ 3 ]

2 голосов
/ 09 февраля 2010

Это проблема, в Vista / Win7, похоже, нет API для получения токена непривилегированного пользователя, который вам необходим для вызова CreateProcessAsUser (). Единственные решения, которые я нашел, включают использование планировщика задач для запуска программы. Это не кажется мне очень практичным.

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

0 голосов
/ 24 февраля 2010

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

http://brandonlive.com/2008/04/27/getting-the-shell-to-run-an-application-for-you-part-2-how/

Он получает интерфейс к Explorer.exe, который должен работать в обычном контексте пользователя, и просит Explorer выполнить команду от его имени. Это делается с помощью простых, документированных COM-интерфейсов и без необходимости возиться с токенами процессов или внедрением кода / DLL.

0 голосов
/ 10 февраля 2010

Единственный способ сделать это без хаков - это иметь два процесса (могут быть реализованы в одном и том же .exe)

Экземпляр A запускает экземпляр B с ShellExecute и глаголом runas. B выполняет установку, когда его время запускать ваше приложение на «конечной странице», он использует некоторую форму взаимодействия между процессами (RPC, разделяемая память + события и т. Д.), Когда A указывает ему запустить процесс от его имени.

...