Форум: "Система";
Текущий архив: 2003.04.07;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.008 c