Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 2003.02.17;
Скачать: [xml.tar.bz2];

Вниз

Service + приложение   Найти похожие ветки 

 
ewgeny   (2002-12-15 10:38) [0]

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

Какой лучше способ использовать для проверки того, загружен ли данный процесс в память или нет (в данном случае мое приложение)?
Приходит в голову тупой способ проверки по какому-нибудь mutex и
если данного объекта нет в памяти, то запускать новый процесс(мое приложение).

Может кто занимался данной проблемой ? И нужно ли в моейм случае использовать WaitForSingleObject ?


 
AngeL B.   (2002-12-15 10:49) [1]

Поясни более подробно что тебе надо.
То ли тебе надо, чтобы прилага стартовала всегда при запуске системы, но тогда есть уже готовое решение (anysrv.exe из Resource Kit).
То ли тебе надо чтобы программа запускалась по событию, но тогда непонятно, кто его будет устанавливать.

ЗЫ: Кстати Mutex ни в одном случае совершенно ни при чем.


 
ewgeny   (2002-12-15 10:54) [2]

написанный сервис должен при старте системы запускать другое приложение. Если данное приложение убить(например пользователь нажал крестик), то сервис глядя, что процесс убит, должен опять поднять его. Вот и всё.


 
Reindeer Moss Eater   (2002-12-15 10:56) [3]

А может пусть сам сервис делает то, что должно делать приложение?


 
ewgeny   (2002-12-15 11:03) [4]

нет, именно нужно то, что описано в вопросе ;(


 
AngeL B.   (2002-12-15 11:22) [5]

Ну и проверяй каждые пол-сек. наличие прилаги.
Только сервис надо запускать с правом интерактивного общения


 
ewgeny   (2002-12-15 13:43) [6]

Накидал вот тут примерчик, суть которого сводится к тому, что если процесса нет в памяти, то он создается.

НО: ЗАГРУЗКА ПРОЦЕССОРА ПО TASK MANAGER"У 100%. Как избежать этого ?

структуры si и pi передаются нулевыми.

while not Terminated do
begin
If Flag or ( myExitCode <> STILL_ACTIVE ) Then
If CreateProcess( nil,
PChar("c:\telnet\telnet.exe"),
nil,
nil,
false,
normal_priority_class,
nil,
nil,
si,
pi ) Then
begin
Flag := False;
ProcessId := pi.dwProcessId;
hProcess := pi.hProcess;
end;
GetExitCodeProcess( hProcess, myExitCode);
ServiceThread.ProcessRequests(False);
end;


 
Reindeer Moss Eater   (2002-12-15 13:48) [7]

Сначала
ServiceThread.ProcessRequests(False);
заменить на
ServiceThread.ProcessRequests(True);

Потом добавить Sleep внутри цикла


 
ewgeny   (2002-12-15 14:26) [8]

поменял и вставил Sleep. При старте сервиса запускается процесс, а вот если этот процесс убить, то новый процесс не открывается ;(


 
Reindeer Moss Eater   (2002-12-15 14:46) [9]

"Не открывается", или не происходит вызова CreateProcess?


 
ewgeny   (2002-12-15 14:51) [10]

Именно не происходит вызова createprocess и такое ощущение, что ProcessRequest(True) ждет чего-то ;)


 
Reindeer Moss Eater   (2002-12-15 15:01) [11]

Ну так это же твой алгоритм, пересмотри условия вызова, проверь флаги на основании которых что-то делается.
И вообще добавь в приложение ведение отладочного журнала. Что бы не гадать на кофейной гуще


 
ewgeny   (2002-12-15 15:15) [12]

надо было все оставить как есть, и СЛИП побольше сделать


 
AngeL B.   (2002-12-15 15:41) [13]

надо было поставить WaitForSingleObject вместо Sleep. Если дождался, процесс прибили, если нет, то просто время истекло.



Страницы: 1 вся ветка

Форум: "Система";
Текущий архив: 2003.02.17;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.01 c
3-52735
VLL
2003-01-30 13:01
2003.02.17
Соединение с Интернетом


8-53120
Rimd
2002-11-01 14:10
2003.02.17
Запуск файла


14-53255
Uncle Archi
2003-01-30 22:57
2003.02.17
Моя игра


8-53131
AlexKur
2002-10-16 00:26
2003.02.17
Как издать звук???


1-53027
MXA
2003-02-10 16:16
2003.02.17
Процедура - обработчик события...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский