![]() |
Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply |
![]() ![]() ![]() |
|
DaDe |
|
|||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 17.6.2007 Репутация: нет Всего: нет |
Добрый день.
Долго пытаюсь уже решить данную проблему, но безуспешно. Может кто из читающих, что-нибудь подскажет по теме. Проблема в том, что есть сервис запущенный с минимальным привилегиями и нужно, чтобы этот сервис запускал консольное приложение от имени администратора. Проблема состоит в том, что в ОС Windows 7 не консольные приложения нормально запускаются, а вот консольные не запускаются. Под XP и консольные запускаются нормально. Один из вариантов запуска:
Может, кто сможет подсказать. Буду очень признателен. |
|||
|
||||
grofast |
|
|||
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 7.3.2008 Репутация: нет Всего: нет |
Добрый день.
Я тоже мучаюсь с этой проблемой. А подскажи как ты определяешь. Рабочую станцию и рабочий стол? StartupInfo.lpDesktop:= Pchar(ST+'\'+DS); Спасибо. |
|||
|
||||
DaDe |
|
|||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 17.6.2007 Репутация: нет Всего: нет |
winsta0\Default
|
|||
|
||||
grofast |
|
|||
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 7.3.2008 Репутация: нет Всего: нет |
Блин у меня на windows7 x64 +delphi 2011 не работает(
Если как обычное приложение все отлично если как сервис ни одно окно не показывается. Хотя процесс запускается отлично.( Это сообщение отредактировал(а) grofast - 4.10.2010, 15:42 |
|||
|
||||
DaDe |
|
|||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 17.6.2007 Репутация: нет Всего: нет |
Результат процедуры Log покажи. Или вопрос, у тебя CreateProcessWithLogon выполняется или нет? |
|||
|
||||
grofast |
|
|||
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 7.3.2008 Репутация: нет Всего: нет |
Если строчку с указанием рабочего стола закоментировать то процесс запускается но на десктопе текущего пользователя не появляется. Если раскоментировать то вообще не запускается CreateProcessWithLogonW всегда возврашает true типа все удачно gestlasterror возврашает 0. Служба под пользователем programist (он в группе администраторы) Это сообщение отредактировал(а) bems - 5.10.2010, 19:57 |
|||
|
||||
grofast |
|
|||
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 7.3.2008 Репутация: нет Всего: нет |
Если из под Ситемы запускаю то выводит в лог ошибку 5
Отказано в доступе. |
|||
|
||||
DaDe |
|
||||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 17.6.2007 Репутация: нет Всего: нет |
Судя по коду. Когда у тебя отображается результат gestlasterror, то CreateProcessWithLogonW не выполняется.
Из под System не получится, есть ограничения. |
||||
|
|||||
bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 21 Всего: 88 |
grofast, кнопка КОД справа вверху над формой ответа
-------------------- Обижено школьников: 8 |
|||
|
||||
kami |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 15 Всего: 72 |
Нарыл у себя в закромах. Писалось несколько лет назад, проверено сейчас под Vista - cmd.exe из сервиса запускается на активном десктопе "только так". В висте система разграничения учетных записей, afair, не отличается от семерки - так же в разных терминальных сессиях, соответственно - разные WinSta и Desktop. Смотреть метод Timer1Timer. Функции когда-то писались под запуск вообще любого файла, у которого есть ассоциации в реестре. Может быть, что-то (или большинство) лишнее - просьба удалить самим ![]() Присоединённый файл ( Кол-во скачиваний: 517 ) ![]() |
|||
|
||||
grofast |
|
||||
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 7.3.2008 Репутация: нет Всего: нет |
Нет почему у меня в коде прописано и если удачно процесс создается и если не удачно Выводить лог
Я кстати досмотрелся вчера ,в логах пишет что приложение запустилось но не может инициализироваться. Видимо из-за виртуализации. Если под тем пользователем под которым стартует служба то приложение запускается но на десктопе текущего пользователя не отображается я так думаю оно в нулевой сессии. Висит себе в процесах. Если из под другого пользователя приложение пытается запуститься то в логах пишет explorer.exe - Ошибка приложения Ошибка при запуске приложения (0xc0000142). Для выхода из приложения нажмите кнопку "ОК". То есть CreateProcessWithLogonW отрабатывает на отлично приложение запускается но почемуто не может инициализироватся. Я так думаю из-за виртуализации. Пока эксперементирую.) Добавлено @ 10:18
Спасибо. ![]() Это сообщение отредактировал(а) bems - 6.10.2010, 16:43 |
||||
|
|||||
grofast |
|
|||
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 7.3.2008 Репутация: нет Всего: нет |
Спасибо огромное. Я много функций переписал одной строкой и много нового узнал. И все заработало. Спасибо спасибо спасибо)))). |
|||
|
||||
grofast |
|
|||
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 7.3.2008 Репутация: нет Всего: нет |
kami
А еще просьба подскажи плиз нужно для решения второй части задачи. Если ни один пользователь не залогинен можно ли из под службы (system) запустить мою программу с правами пользователя? Или может залогинится сначала под ним нужно.? Спасибо. |
|||
|
||||
bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 21 Всего: 88 |
Модератор: grofast, я второй раз прошу тебя пользоваться кнопкой "код". В следующий раз пойдешь на пару дней в ридонли
-------------------- Обижено школьников: 8 |
|||
|
||||
kami |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 15 Всего: 72 |
Чтобы запустить программу с правами пользователя, нужно получить права пользователя. Чтобы получить права пользователя, нужно или получить его токен (для не-вошедшего в систему пользователя - вызвать LogonUser) или сразу вызвать CreateProcessWithLogonW, которая автоматом его "залогинет". P.S. Могу ошибаться - давно не освежал в памяти данные этого направления. P.P.S. Вспомнил, что у этих моих функций есть ограничение, вытекающее из ограничения WTSGetActiveConsoleSessionID - если активно используется FastUserSwitching, то она будет возвращать SessionID для первого из залогиненных, и не важно, находится его сессия в WTS_SESSIONSTATE_LOCK (вызывана "смена пользователя") или активна. Решение, afair, в регистрации для своего сервиса нотификаций о смене сессии (SERVICE_CONTROL_SESSIONCHANGE), правда для этого нужно задействовать HandlerEx, а не Handler, как в Delphi ( по крайней мере по D7 включительно) и работе уже с этими данными. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: WinAPI и системное программирование" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |