|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
28.10.2007, 17:11 | #1 |
Форумчанин
Регистрация: 15.08.2007
Сообщений: 118
|
Проблема со службой...
Нужно написать службу, которая проверяет запущена ли моя программа и если нет - запускает её. Я сделал через FindWindow и тут появилась проблема... Служба же запускается сразу же с Windows и начитает запускатьмою программу!
Как сделать, чтобы служба запускалась после того, как пользователь войдет в систему? Или как узнать залогинился ли пользователь? |
29.10.2007, 19:24 | #2 |
Форумчанин
Регистрация: 24.06.2007
Сообщений: 351
|
Запретить запуск второго экземпляра программы
Этот текст должен находиться в модуле проекта (добраться до него можно через меню View/Project Source).
Код:
Я не маюсь бездельем, я от него тащусь!
|
30.10.2007, 05:05 | #3 |
Форумчанин
Регистрация: 23.09.2007
Сообщений: 147
|
попробуй ждать пока не появиться проц explorer.exe, а потом подожди ещё секунды две, потом выполняй остальной код службы
вот функция поиска проца Код:
Вот у тя чё должно первым в проекте идти Код:
Я надеваю тапочки, ищу чем похмелиться, ах, если я сейчас умру, то на... я родился
|
30.10.2007, 19:06 | #4 |
Форумчанин
Регистрация: 15.08.2007
Сообщений: 118
|
2 joker:
Спасибо! Это как-раз то, что мне нужно!!! А кто-нибудь знает как узнать под каким именем залогинился юзер? Только спотреть нужно не по тому от кого запущена твоя прога, тк из-под службы она запускается как SYSTEM |
31.10.2007, 12:33 | #5 | |
Пользователь
Регистрация: 26.10.2007
Сообщений: 79
|
Цитата:
Пусть лучше служба запускается вместе с системой, а момент логина определяет по сообщению WM_WTSSESSION_CHANGE. Для этого создайте в своем сервисе Message-only окошко (ему будут отправляться сообщения) и зарегистрируйте его на получение нотификации о смене сессии (WTSRegisterSessionNotification). Посмотрите этот и смежные разделы: http://msdn2.microsoft.com/en-us/library/aa383841.aspx Так вы определите момент входа в систему. И пусть при этом происходит запуск вашей программы. А уже в ней предусмотрите запрет запуска второй копии, например, так: 1. Приложение при запуске пытается создать мьютекс с уникальным именем ('MySuperPuperApplication', например) вызовом CreateMutex 2. Если GetLastError возвращает ERROR_ALREADY_EXISTS, значит приложение уже запущено, выходим из программы. Иначе - продолжаем обычное выполнение. |
|
31.10.2007, 18:57 | #6 |
Форумчанин
Регистрация: 15.08.2007
Сообщений: 118
|
2 Slovinsky:
Спасибо, но вариант joker'а мне как-то ближе... |
01.11.2007, 19:22 | #7 |
Форумчанин
Регистрация: 15.08.2007
Сообщений: 118
|
Как узнать под каким именем залогинился юзер(см. 4й пост)?
Оооочень нужно! |
02.11.2007, 18:37 | #8 |
добрый няша
Старожил
Регистрация: 29.10.2006
Сообщений: 4,804
|
Код:
|
02.11.2007, 20:14 | #9 |
Форумчанин
Регистрация: 15.08.2007
Сообщений: 118
|
2 rpy3uH:
Если прогу запустить из под сервиса, то имя пользователя будет SYSTEM, а мне нужно узнать РЕАЛЬНОЕ имя... |
03.11.2007, 11:05 | #10 | |
Пользователь
Регистрация: 26.10.2007
Сообщений: 79
|
Цитата:
Жаль, что вас мой вариант не устроил, там бы этого даже не требовалось, а так - задача становится трудноватой. Код приводить не стану, уж извините. Порядок действий: 1. Чуть-чуть переделайте свою ProcessExists, чтобы вместо true/false возвращался идентификатор просесса. 2. Получаете привилегию SeDebugName, без нее вы не сможете открыть процесс (п.3.) 3. Открываем процесс (OpenProcess) с маской доступа PROCESS_QUERY_INFORMATION 4. Открываем маркер доступа процесса (OpenProcessToken) с флагом TOKEN_QUERY. 5. Вызываем GetTokenInformation с флагом TokenUser 6. Если нужен не SID, а имя пользователя (ума не приложу, зачем), то вызываем LookupAccountSid 7. Закрываем дескриптор маркера и процесса. PS: Примеры здесь: http://programmersforum.ru/showthrea...4241#post44241 - в конце - получение привилегий http://www.delphikingdom.com/asp/vie...catalogid=1322 - теория того, что я вам написал. Последний раз редактировалось Slovinsky; 03.11.2007 в 11:59. |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
И ещё проблема с DLL | Altera | Общие вопросы Delphi | 7 | 25.06.2008 23:45 |
проблема с службой | Pitbull | Работа с сетью в Delphi | 6 | 22.06.2008 19:08 |
проблема | bill | Свободное общение | 7 | 08.07.2007 21:05 |
проблема с SQL 5.0.37 | Pitbull | БД в Delphi | 0 | 15.06.2007 10:31 |