2014-01-29 5 views
1

У меня есть приложение, выполняющее административные привилегии. Привилегии автоматически эскалации с использованием манифеста приложения.Выполнение задачи с привилегированным пользователем из приложения с повышенными правами

<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3"> 
    <requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> 
    </requestedPrivileges> 

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

+1

Вам нужно будет реализовать метод [для олицетворения текущего пользователя] (http://stackoverflow.com/a/7250145/1250033). – rae1

+0

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

ответ

2

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

+0

Для олицессии требуется пароль пользователя, правильно? Могу ли я это сделать, не запрашивая пароль пользователя каждый раз? –

+0

См. Мое обновление. – krowe