2010-04-23 6 views
1

У меня есть один поток, который я хотел бы запустить как администратор в своем приложении. В остальной части приложения я могу с радостью работать как пользовательский уровень по умолчанию (asInvoker). Это возможно? Я замечаю, что есть функция «ImpersonateLoggedOnUser». Могу ли я каким-то образом использовать это для входа в систему администратора, а затем получить поток для олицетворения этого человека?Windows 7 UAC elevation

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

Редактировать: Если мне нужно запустить отдельный процесс, я могу создать новый процесс CreateProcess и запустить его с определенной точки входа. Я могу, конечно, использовать обработку командной строки для этого, но я бы предпочел, чтобы я мог остановить пользователя от входа в командную строку и начать незабиваемый процесс!

ответ

4

Нет, высота за каждый процесс, а не нить.

Если остальная часть приложения имеет для запуска без приподнят, вы можете запустить себя повышенный с некоторым параметром (myapp.exe /uac "ipcparamhere") и использовать какие-то Inter-process communication общаться обратно в «основной экземпляр» ваше приложение. (Если повышенный процесс выполняет только простую операцию, возможно, вы можете проверить успех, используя код выхода процесса)

+0

Да, его взгляд досадно, что мне придется что-то делать. Я обновлю свой вопрос, хотя ... – Goz

1

Это невозможно. Вам нужно будет получить привилегии администратора, включив в приложение манифест. Google «requireAdministrator», чтобы найти манифест, который вам понадобится. Ваш пользователь, вероятно, быстро устанет от этого, снова и снова, ваш лучший выбор - отделить задачу, требующую этих привилегий, в отдельный процесс. Например, услуга.

+0

Я знаю об этом ... возникает проблема, что вы не можете перетащить из браузера (процесс пользовательского режима) в мое приложение (процесс администратора). Таким образом, если я не могу поднять один поток, тогда мне нужно будет запустить отдельный процесс, который займет справедливую бит реструктурирования :( – Goz

+0

Ну, идея заключалась в том, чтобы * не * заставить ваше приложение требовать права администратора. D + D. –

+0

И если это невозможно? – Goz

1

Вы можете запустить отдельный exe и иметь манифест, говорящий, что он требует администратора. Затем обязательно запустите его с выполнением оболочки, в которой используются манифесты, и вы все настроены. Как задумчивое прикосновение, положите экран UAC на кнопку, которая начинает эту нить. (Отправьте сообщение BCM_SETSHIELD, если вы все это делаете вручную).

Вы можете решить, хотите ли вы видеть видимое окно или нет в отдельном процессе. Тем временем пользователь все равно может перетащить в основное приложение.

Смежные вопросы