Повышение привилегий только когда и если требуется - PullRequest
3 голосов
/ 17 июня 2010

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

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

Я вижу, что CoCreateAsAdmin может потенциально решить проблему, но автор компонента не настроил необходимые записи реестра, и я не уверен, как использовать CoCreateAsAdmin в C # и в сочетании с Runtime -Callable-Wrapper, созданный tlbimp.

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

Спасибо ...

Ответы [ 2 ]

3 голосов
/ 17 июня 2010

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

К счастью, это довольно просто.Используйте объект Process для запуска командной строки, которая зарегистрирует и запустит COM-сервер.Убедитесь, что манифест приложения .exe, который вы запускаете, помечает его как требующий повышения прав, и пользователю будет автоматически предложено выполнить его до запуска.

1 голос
/ 17 июня 2010
...