Форум: "WinAPI";
Текущий архив: 2005.06.06;
Скачать: [xml.tar.bz2];
ВнизЗапуск программы из сервиса Найти похожие ветки
← →
IronMan (2005-04-16 18:27) [0]Доброе время суток.
Возникла задача запустить программу из сервиса... программа то запускается, вот только её кроме как в таск менеджере нигде не видно! Как быть?
вот код:
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) из сервиса?
← →
Ученик (2005-04-16 19:16) [1]TService.Interactive = True
← →
VMcL © (2005-04-16 19:17) [2]>>IronMan (16.04.05 18:27)
>Возникла задача запустить программу из сервиса... программа то запускается, вот только её кроме как в таск менеджере нигде не видно! Как быть?
Подозреваю, что нужно указать si.lpDesktop.
>Как можно показать сообщение (showmessage) из сервиса?
Не уверен на 100%, но можно попробовать:MessageBox(..., ..., ..., MB_OK or MB_SERVICE_NOTIFICATION);
← →
IronMan (2005-04-16 19:24) [3]VMcL ©
Не уверен на 100%, но можно попробовать:
MessageBox(..., ..., ..., MB_OK or MB_SERVICE_NOTIFICATION);
Спасибо большое- сработало!
Подозреваю, что нужно указать si.lpDesktop.
Я тоже так думаю, но ума не приложу, какое имя у моего десктопа ((
Ученик
TService.Interactive = True
Я впервую очередь так и сделал, но мне так и не удалось вызвать (показать) не одной формы из сервиса. Такое впечатление, что сервис не видит рабочего стола.
← →
IronMan (2005-04-16 19:55) [4]Чуть не забыл! Как сделать программу, чтобы её можно было запускать и как сервис и как простое приложение. РАдмин как-то это умеет делать...
← →
kaZaNoVa © (2005-04-16 20:19) [5]IronMan (16.04.05 19:55) [4]
имхо это сложно ..
← →
Ученик (2005-04-16 20:29) [6]Не очень сложно :-)
{ 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
← →
IronMan (2005-04-16 20:36) [7]Ученик
Спасибо! Попробую!
А как можно показать окно из сервиса?... что то не получается...
← →
IronMan (2005-04-16 20:41) [8]Ученик
А SCManager по-умолчанию запускает сервис именно с параметром /SERVICE?
← →
Ученик (2005-04-16 20:47) [9]>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]
Он запускает с теми параметрами, которые заданы при установке сервиса, а они могут быть любыми
← →
sniknik © (2005-04-16 20:48) [10]IronMan (16.04.05 19:55) [4]
scktsrvr.exe в поставке дельфей именно так и сделан, и исходнике в тойже поставке есть, посмотри.
← →
Ученик (2005-04-16 20:52) [11]>sniknik © (16.04.05 20:48) [10]
Если не затруднит, каталог исходников не подскажите ?
← →
IronMan (2005-04-16 20:58) [12]Ученик
Еле нашёл ))
C:\Program Files\Borland\Delphi7\Source\Vcl
← →
Ученик (2005-04-16 21:04) [13]>IronMan (16.04.05 20:58) [12]
А я Demos обшарил, не нашел :-)
← →
IronMan (2005-04-16 21:05) [14]sniknik ©
Спасибо громаднейшее. scktsrvr.exe- это ответ на все мои вопросы.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2005.06.06;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.012 c