Возникла забавная задачка. Необходимо было запустить приложение OPC-клиент не являющийся интерактивным приложением и транслирующим данные на верхний уровень. Консоль хоста достаточно активно используется и посему существует вероятность закрытия апликухи непричастным пользователем. Рассмотрел все варианты и запустил как сервис, причем в этот раз решил разобраться с вариантом от мелкомягких. Вот конспект новой главы моей справочки, может кому нибудь пригодится
Сервис (служба) – приложение контролируемое системой посредством механизма позволяющего запускать процессы, не увязываемые с интерактивным пользователем. Windows-сервисы состоят из трех компонентов:
сервисного приложения (service application),
программы управления сервисом (service control program, SCP),
диспетчера управления сервисами (service control manager, SCM).
Сервисные приложения представляют собой Windows-программы (GUI или консольные) с дополнительным кодом для обработки команд от SCM и возврата ему статусной информации (реализуют интерфейс iService).
Microsoft в составе Resource Kit для Windows предлагает набор программ, позволяющий выполнить любое приложение как сервис. SrvAny – позволяет выполнить любое приложение как сервис, она считывает путь файла, который должен быть загружен из раздела реестра Parametrs пользовательского сервиса. При запуске SrvAny уведомляет SCM о том, что она предоставляет определенный сервис. Получив от SCM команду SrvAny запускает пользовательское приложение как дочерний процесс, последний получает копию маркера доступа процесса SrvAny и ссылку на тот же объект WindowsStation. Таким образом, сервис выполняется с параметрами защиты и настройками, указанными вами при конфигурировании пользовательского сервиса. Для регистрации пользовательского сервиса используется консольная утилита InstSrv.exe.
Для создания определяемой пользователем службы Windows NT выполните следующие действия:
1. В командной строке (выполняется CMD.EXE) введите следующую команду:
Путь\INSTSRV.EXE Моя_служба путь\SRVANY.EXE, где путь указывает букву диска и каталог набора Windows NT Resource Kit (например, C:\RESKIT), а Моя_служба — имя создаваемой службы.
Пример:
C:\Program Files\Resource Kit\Instsrv.exe Notepad C:\Program Files\Resource Kit\Srvany.exe
ПРИМЕЧАНИЕ. Для проверки правильности создания службы убедитесь, что параметр ImagePath в разделе
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\имя_службы указывает на SrvAny.exe. Если этот параметр установлен неправильно, служба прекращает работу вскоре после запуска и возвращает код события 7000 — «Не удается запустить имя_службы».
2. Запустите редактор реестра (Regedt32.exe) и найдите следующий подраздел:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\<My Service>
3. В меню «Правка» выберите «Добавить раздел». Введите следующие данные и нажмите кнопку «ОК»:
Название раздела: «Parameters»
4. Выберите раздел «Parameters».
5. В меню «Правка» выберите «Добавить параметр». Введите следующие данные и нажмите кнопку «ОК».
Имя параметра: «Application»
Тип данных: REG_SZ
Строка: <путь>\<application.exe> где <путь>\<имя_приложения_с_расширением> — это буква диска и полный путь к исполняемому файлу приложения, включая расширение (например C:\WinNT\Notepad.exe)
6. Закройте редактор реестра.
7. Определите параметры запуска службы и необходимые зависимости.
Для определения зависимостей службы необходимо:
1. Запустите редактор реестра (Regedt32.exe) и найдите следующий подраздел:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\<My Service>
Имя параметра: DependONService
Тип данных: REG_MULTI_SZ
2. Перечислить службы из раздела:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\
ожидание запуска которых требуется.
ПРИМЕР:
RPCSS
Browser
Для задания текста описания службы необходимо:
1. Запустите редактор реестра (Regedt32.exe) и найдите следующий подраздел:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\<My Service>
Имя параметра: Description
Тип данных: REG_SZ
Задать текст описания службы.