Главная страница
    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.007 c
14-19824
Supreme 2
2003-03-19 22:46
2003.04.07
Хочу познать себя...


7-19899
BigVova
2003-02-12 22:31
2003.04.07
Как узнать формат бумаги принтера по умолчанию?


3-19465
DmitryMN
2003-03-19 11:58
2003.04.07
CheckBox в DBGrid


1-19695
OxyGen
2003-03-26 13:51
2003.04.07
Цвет в ListBox е!!!!!


14-19830
int64
2003-03-20 14:17
2003.04.07
Загадка. Лев и собачка.





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