PDA

Просмотр полной версии : Запуск локальной версии INTUIT в качестве сервиса Windows


devious_code
30.11.2007, 15:38
Мне удалось запустить локальный сервер INTUIT в качестве сервиса Windows 2003 (должно работать и на других NT-системах).

Методика проста. Требуются программы instsrv.exe и srvany.exe из комплетка Resource Toolkit.
С помощью программы instsrv добавляем srvany в список сервисов (читайте справку по instsrv).

Далее мне пришлось написать маленькую программку на Delphi (ее легко перенести на C), которая запускает скрипт server_win32-3.pl с помощью идущего в комплекте Perl'а (путь к Perl должен быть в системной переменной PATH):

program IntuitSrv; //IntuitSrv.dpr

uses Windows;

var
StartInfo : TStartupInfo;
ProcInfo : TProcessInformation;
CreateOK : Boolean;
begin
FillChar(StartInfo,SizeOf(TStartupInfo),#0);
FillChar(ProcInfo,SizeOf(TProcessInformation),#0);
StartInfo.cb := SizeOf(TStartupInfo);
StartInfo.wShowWindow:=0;
StartInfo.dwFlags:=STARTF_USESHOWWINDOW;

CreateOK := CreateProcess(nil,
'perl server_win32-3.pl',
nil,
nil,
False,
NORMAL_PRIORITY_CLASS,
nil,
'C:\Program Files\INTUIT.ru\local_web_server\', StartInfo, ProcInfo);

if CreateOK then
WaitForSingleObject(ProcInfo.hProcess, INFINITE);
end.


2. Идем в реестр по адресу HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Servic es\INTUIT\
Создаем новый ключ Parameters, в нем создаем две строковых переменных

"Application"="C:\\Program Files\\INTUIT.ru\\local_web_server\\src\\IntuitSrv .exe"
"AppDirectory"="C:\\Program Files\\INTUIT.ru\\local_web_server"

Все. Теперь просто запускаем сервис. Еще можно в файле server_win32-3.pl изменить значение константы port на 80 (если на этом порту уже не весит веб-сервер), для простоты.

Запустить сервис без программы IntuitSrv.exe у меня получалось, но он почему-то не отвечал на запросы. В данной конфигурации все работает, но методику можно доработать при желании.

Если что-то непонятно, могу прояснить некоторые моменты более детально.

erezn
30.11.2007, 18:05
Запустить сервис без программы IntuitSrv.exe у меня получалось, но он почему-то не отвечал на запросы. В данной конфигурации все работает, но методику можно доработать при желании.

Интересно, что будет, если использовать wperl (а не perl)?
Сервис будет работать?

wperl (в отличии от perl) не использует стандартные потоки ввода вывода, и не требует терминала.

"Application"="C:\\Program Files\\INTUIT.ru\\local_web_server\\bin\\perl5.8.6 \\bin\\wperl.exe server_win32-3.pl"
"AppDirectory"="C:\\Program Files\\INTUIT.ru\\local_web_server"

Так не будет работать?

devious_code
30.11.2007, 22:18
wperl почему-то не запускает скрипт server_win32-3.pl.
вводишь wperl.exe server_win32-3.pl - пустой экран и сразу все вылетает без сообщения об ошибке, даже "Hi" не пишет.

Вообще можно сделать bat-файл для автоматической установки сервиса windows, добавив в инсталлятор сам bat-файл, программу для запуска perl'а, reg-файл, утилиты instsrv и srvany.

erezn
03.12.2007, 18:35
wperl почему-то не запускает скрипт server_win32-3.pl.
вводишь wperl.exe server_win32-3.pl - пустой экран и сразу все вылетает без сообщения об ошибке, даже "Hi" не пишет.
Так где то и должно быть. wperl.exe не создает терминального окна.
А в списке процессов wperl нет?

Вообще можно сделать bat-файл для автоматической установки сервиса windows, добавив в инсталлятор сам bat-файл, программу для запуска perl'а, reg-файл, утилиты instsrv и srvany.
Интересная идея. А чем это лучше? Как убрать программу из памяти, когда она не нужна? (то есть завершить ее)

knd
13.10.2008, 14:34
"Application"="C:\\Program Files\\INTUIT.ru\\local_web_server\\bin\\perl5.8.6 \\bin\\wperl.exe server_win32-3.pl"
"AppDirectory"="C:\\Program Files\\INTUIT.ru\\local_web_server"

Так не будет работать?
Так не будет работать, надо пользовать AppParameters, и не городить батники или проги, например:
"Application"="C:\\Program Files\\INTUIT.ru\\local_web_server\\bin\\perl5.8.6 \\bin\\wperl.exe"
"AppParameters"="server_win32-3.pl"
"AppDirectory"="C:\\Program Files\\INTUIT.ru\\local_web_server"