Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.04.07;
Скачать: CL | DM;

Вниз

NT Service & CreateProcess   Найти похожие ветки 

 
Alex Shulg ©   (2003-02-14 09:32) [0]

Уважаемые мастера, помогите запустить программу из Сервиса!
Я делаю так:
procedure TServicePlaner.ServiceExecute(Sender: TService);
begin
while not Terminated do
begin
ServiceThread.ProcessRequests(True);
if not RunPlaner then
begin
FillChar(lpStartupInfo,Sizeof(lpStartupInfo),#0);
lpStartupInfo.cb:=Sizeof(lpStartupInfo);
lpStartupInfo.dwFlags:=STARTF_USESHOWWINDOW;
lpStartupInfo.wShowWindow:=SW_SHOWNORMAL;
if CreateProcess(nil,
PChar(ExtractFilePath(ParamStr(0))+"Planer.exe"),
nil,nil,false,0,nil,nil,lpStartupInfo,
lpProcessInformation) then
begin
...
end
else
begin
MessageBox(Null,PChar(sErrorRunPlaner+#10+sPlanerHeader+"!"),PChar(sServiceHeader),MB_OK+MB_ICONERROR+MB_SERVICE_NOTIFICATION);
end;
RunPlaner:=True;
end;
end;
end;

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


 
Reindeer Moss Eater   (2003-02-14 09:58) [1]

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

А если сервис запускает программу, когда никакого трея нет вообще?


 
Alex Shulg ©   (2003-02-14 10:00) [2]

Значит должна появлять, когда трей будет. Но пока я запускаю и останавливаю процесс вручную, так что трей есть. А как кстати сделать, чтобы потом она появлялась в трее?


 
sniknik ©   (2003-02-14 13:04) [3]

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

SERVICE_INTERACTIVE_PROCESS
A flag that enables a Win32 service process to interact with the desktop.

хотя ... ? MessageBox срабатывает, показывает чтонибудь? тогда должно.

сделай лог в запускаемой программе, типа пиши в файл на каждое действие "меня запустили", .. "ложу иконку в трэй"... и т.д. а исключительные ситуации обязательно, многое станет ясно.


 
ZZ ©   (2003-02-14 13:08) [4]

startupinfo.lpdesktop:="Winsta0\Default";


 
Alex Shulg ©   (2003-02-14 16:38) [5]

Включил взаимодействие с рабочим столом, добавил startupinfo.lpdektop, добавил лог. Программа работает, получает сообщения о включении паузы, о продолжении:
if FindWindow(nil,"TrayFormPlaner")<>0 then
PostMessage(FindWindow(nil,"TrayFormPlaner"),WM_ServicePlaner,1,0);
но вот выгружаться - не выгружается при
if FindWindow(nil,"TrayFormPlaner")<>0 then
PostMessage(FindWindow(nil,"TrayFormPlaner"),WM_Close,0,0);
остается в памяти, а иконка так и не появляется!



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

Текущий архив: 2003.04.07;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.012 c
4-19911
AlexSW
2003-02-06 11:44
2003.04.07
Эмуляция нажатия 2-х клавиш одновремкнно.


1-19654
LyzD
2003-03-25 02:28
2003.04.07
Вопрос по работе с формами...


1-19606
[BAD]Angel
2003-03-26 11:39
2003.04.07
Удаление элементов из ListBox


9-19407
Док
2002-11-05 15:19
2003.04.07
Как создать полноценную карту?


3-19474
Сергей Шапранов
2003-03-19 14:08
2003.04.07
Работа Paradox в сети