Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 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
1-19597
Shumov D.
2003-03-28 17:16
2003.04.07
OpenDialog


3-19430
Lenin
2003-03-18 11:36
2003.04.07
TreeView и БД


1-19529
Pavel_
2003-03-26 14:25
2003.04.07
выполенние процедуры по указателю


14-19803
NetBreaker666
2003-03-19 19:11
2003.04.07
Слабо ? В. Цой.


6-19745
bubus
2003-02-12 18:52
2003.04.07
ISQ





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский