Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Запуск программы из сервиса [D7, WinXP]


IronMan ©   (2005-04-16 18:27:00) 

Доброе время суток.
Возникла задача запустить программу из сервиса... программа то запускается, вот только её кроме как в таск менеджере нигде не видно! Как быть?

вот код:

procedure TServ.ServiceExecute(Sender: TService);
var
 si: STARTUPINFO;
 pi: PROCESS_INFORMATION;
 pchCmd: PChar;
begin

 FillChar(si,SizeOf(TStartupInfo),#0);
 FillChar(pi,SizeOf(TProcessInformation),#0);
 SI.cb := SizeOf(TStartupInfo);
 si.wShowWindow := SW_SHOW;
 pchCmd := 'C:\WINDOWS\system32\calc.exe';
 if CreateProcess(nil,
   pchCmd,
   nil,
   nil,
   false,
   NORMAL_PRIORITY_CLASS,
   nil,
   nil,
   si,
   pi) then
 begin
   //windows.MessageBox(0, 'Error', 'Test', MB_OK);
 end;
end;

и ещё вопросик. Как можно показать сообщение (showmessage) из сервиса?


IronMan   (2005-04-16 21:05:00) [1]

sniknik ©

Спасибо громаднейшее. scktsrvr.exe- это ответ на все мои вопросы.


Ученик   (2005-04-16 21:04:00) [2]

>IronMan   (16.04.05 20:58) [12]

А я Demos обшарил, не нашел :-)


IronMan   (2005-04-16 20:58:00) [3]

Ученик

Еле нашёл ))
C:\Program Files\Borland\Delphi7\Source\Vcl


Ученик   (2005-04-16 20:52:00) [4]

>sniknik ©   (16.04.05 20:48) [10]
Если не затруднит, каталог исходников не подскажите ?


sniknik   (2005-04-16 20:48:00) [5]

IronMan   (16.04.05 19:55) [4]
scktsrvr.exe в поставке дельфей именно так и сделан, и исходнике в тойже поставке есть, посмотри.


Ученик   (2005-04-16 20:47:00) [6]

>IronMan   (16.04.05 20:36) [7]

Ученик   (16.04.05 19:16) [1]

Проверить, что в списке служб (сервисов) в параметрах установлен Allow service to interact with Desktop

IronMan   (16.04.05 20:41) [8]
Он запускает с теми параметрами, которые заданы при установке сервиса, а они могут быть любыми


IronMan   (2005-04-16 20:41:00) [7]

Ученик

А SCManager по-умолчанию запускает сервис именно с параметром  /SERVICE?


IronMan   (2005-04-16 20:36:00) [8]

Ученик

Спасибо! Попробую!
А как можно показать окно из сервиса?... что то не получается...


Ученик   (2005-04-16 20:29:00) [9]

Не очень сложно :-)

{ MyProject.dpr }

if (ParamCount > 0) and (ParamStr(1) = '/SERVICE') then begin
 SvcMgr.Application.Initialize;
 ....
 SvcMgr.Application.Run;
end else begin
 Forms.Application.Initialize;
 ...
 Forms.Application.Run;
end


kaZaNoVa   (2005-04-16 20:19:00) [10]

IronMan   (16.04.05 19:55) [4]
имхо это сложно ..


IronMan   (2005-04-16 19:55:00) [11]

Чуть не забыл! Как сделать программу, чтобы её можно было запускать и как сервис и как простое приложение. РАдмин как-то это умеет делать...


IronMan   (2005-04-16 19:24:00) [12]

VMcL ©
Не уверен на 100%, но можно попробовать:
MessageBox(..., ..., ..., MB_OK or MB_SERVICE_NOTIFICATION);


Спасибо большое- сработало!

Подозреваю, что нужно указать si.lpDesktop.

Я тоже так думаю, но ума не приложу, какое имя у моего десктопа ((

Ученик
TService.Interactive = True


Я впервую очередь так и сделал, но мне так и не удалось вызвать (показать) не одной формы из сервиса. Такое впечатление, что сервис не видит рабочего стола.


VMcL   (2005-04-16 19:17:00) [13]

>> IronMan   (16.04.05 18:27)

> Возникла задача запустить программу из сервиса... программа то запускается, вот только её кроме как в таск менеджере нигде не видно! Как быть?

Подозреваю, что нужно указать si.lpDesktop.

> Как можно показать сообщение (showmessage) из сервиса?

Не уверен на 100%, но можно попробовать:
MessageBox(..., ..., ..., MB_OK or MB_SERVICE_NOTIFICATION);


Ученик   (2005-04-16 19:16:00) [14]

TService.Interactive = True


Наверх

Титульная страница Поиск, карта сайта Написать письмо