Главная страница
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.018 c
1-19642
Шурик Ш
2003-03-25 16:03
2003.04.07
Как обратиться к области в несколько строк листа Excel?


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


1-19592
ewgeny
2003-03-27 10:41
2003.04.07
указатель на структуру


3-19453
Кирк
2003-03-18 16:38
2003.04.07
проблема с ODBC


1-19537
Minog
2003-03-26 13:11
2003.04.07
перегрузка