Главная страница
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
3-19468
Vanysha
2003-03-17 19:03
2003.04.07
Сохранение содержимого OLE container в файле


14-19783
AVR
2003-03-18 10:07
2003.04.07
Delphi -> Kylix ?


14-19811
Буш
2003-03-18 11:32
2003.04.07
Ультиматум России


1-19526
Rafik
2003-03-25 14:10
2003.04.07
Распечатка в отчте


3-19470
Unone
2003-03-19 07:41
2003.04.07
Фильтрация данных