|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
15.03.2012, 01:08 | #1 |
Пользователь
Регистрация: 25.09.2010
Сообщений: 24
|
Запуск приложения на рабочем столе пользователя из сервиса(win7)
Здравствуйте! Был сервис который при старте системы запускал процесс, в win7 все работало не так как хотелось из-за того что сервисы в нулевой сессии.
Делаю следующее: 1. Подписал сервис на события SERVICE_ACCEPT_SESSIONCHANGE. 2. Как только пользователь залогинится(сообщение WTS_SESSION_LOGON), получаю id сессии и token пользователя: WTSSESSION_NOTIFICATION strSession; HTOKEN hToken; CopyMemory(&strSession, eventData, sizeof(WTSSESSION_NOTIFICATION)); WTSQueryUserToken((DWORD)strSession .dwSessionId, &hToken); 3. Запускаю процесс от имени этого пользователя: CreateProcessAsUser(hToken,... Этого достаточно чтобы запустить процесс на рабой станции зашедшего пользователя(именно того который зашел локально) и на его десктопе? Если нет, не могли бы расписать решение на примере? А то из того что находил в интернете накопал только то что описал выше... Спрашиваю, а не пробую потому, что сервис это часть большой программы и чтобы все собрать нужно очень много времени и моих знаний не достаточно чтобы это сделать( Хочу быть уверен что все будет работать... |
15.03.2012, 01:37 | #2 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
а вы попробуйте блокнот запустить просто, вот и проверите просто.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
17.03.2012, 23:19 | #3 | ||
Форумчанин
Регистрация: 08.07.2010
Сообщений: 505
|
Цитата:
Цитата:
WTSSESSION_NOTIFICATION работает только начиная с WinXp, у меня задача была с Win 2000. У Win есть метод получения уведомления о смене пользователя, который работает начиная отWin2000 и по сей день. Через COM. Делал так: 1. Получить список процессов, запущенных в системе. 2. Найти процесс, запущенный от локального пользователя (explorer.exe например) 3. Получить его токен с правами(TOKEN_QUERY, TOKEN_DUPLICATE и TOKEN_ASSIGN_PRIMARY) 4. Продублировать токен. 5. Создать переменную окружения Environment 6. В StartupInfo указать десктоп пользователя 7. все это дело затолкать в CreateProcessAsUser Под рукой нет рабочего кода. Могу в понедельник.
Знающий не говорит, говорящий не знает (С) Лао Цзы
Последний раз редактировалось Krok27; 18.03.2012 в 07:44. |
||
19.03.2012, 09:46 | #4 | |
Форумчанин
Регистрация: 08.07.2010
Сообщений: 505
|
Цитата:
У нас есть токен пользователя hToken. Далее CreateProcessAsUser: Код:
Код:
1. Можно использовать WTSSendMessage - можно даже задать uTimeOut - время, сколько будет висеть сообщение. 2. Обычный MessageBox(NULL, lpszText,lpszTitle, MB_OK|MB_SERVICE_NOTIFICATION);
Знающий не говорит, говорящий не знает (С) Лао Цзы
|
|
22.03.2012, 12:59 | #5 |
C/C++, Asm
Участник клуба
Регистрация: 02.03.2010
Сообщений: 1,323
|
кстати, SERVICE_ACCEPT_SESSIONCHANGE работает, но не совсем так как хотелось бы. сервис получает уведомление только при условии, что сессия существует, если создается новая сессия то об этом севис ничего не знает.
сервис не получает уведомления если юзер логинится в первый раз после загрузки системы. |
22.03.2012, 14:52 | #6 |
Пользователь
Регистрация: 25.09.2010
Сообщений: 24
|
Скорее всего это из-за того что сервис запускается после первого входа в систему. Я сам еще не делал(в ближайших планах), но говорят можно и раньше запустить... И тогда все правильно работать будет
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Рисование на рабочем столе... | Johnson | Общие вопросы Delphi | 7 | 13.07.2011 19:22 |
Анимация на рабочем столе | Djonik | Помощь студентам | 2 | 09.12.2009 19:58 |
кнопка на рабочем столе | guffer | Общие вопросы Delphi | 3 | 08.07.2009 12:15 |
Значки на рабочем столе | Xardas | Свободное общение | 4 | 01.03.2008 20:21 |
html на рабочем столе | >AdepT< | Win Api | 4 | 28.02.2007 20:06 |