![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Запуск программы из сервиса [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