Добро пожаловать на форум, Гость!
Войдите или зарегистрируйтесь!
Имя пользователя:   Пароль:  
Запомнить меня 




Начать новую тему Ответить на тему   [ 1 сообщение ] 
Автор Сообщение
 Заголовок сообщения: Запуск пограммы Windows как службы
СообщениеДобавлено: 10 фев 2011, 11:53 
Бородатый сис
Аватар пользователя
Статус: Не в сети

GeoIP: Kyrgyzstan

Сообщений: 2902
Откуда: Из серверной
Зарегистрирован: 03 мар 2010, 15:12
Благодарил (а): 19 раз.
Поблагодарили: 122 раз.
ОС: RHEL 6.7
Поставил я на виндовый сервак портированный из-под FreeBSD фаерволл IPFW, только вот нарисовалась проблемка - автозапуск фаера с нужными мне правилами. Дефолтовое правило у него deny all, а это сами понимаете - даже по RDP не зацеплюсь. А правила подгружаются посредством cmd-скрипта, так что пришлось искать пути выхода из создавшейся проблемы. В интернете наткнулся на статейку, которая мне сильно помогла, поэтому выкладываю ее сюда на всеобщее обозрение (естественно с моими небольшими изменениями, которые были нужны исходя из моего конфига).

Бывают ситуации, когда надо запустить некую программу как сервис, т.е. обеспечить ее автоматический запуск при загрузке системы, независимо от того – вошел пользователь в систему или нет.
В идеале мы можем создать папку, например:
c:\autorun и помещать в нее bat-файлы, ярлыки и т.д. При этом все это добро будет запускаться при старте системы. Почти как папка Автозагрузка.

Итак... Для начала нам нужны программы SrvAny.exe и InstSrv.exe, входящие в Windows 2k3 Server Resource Kit Tools с сайта Microsoft или тут

Скачиваем и устанавливаем ресурс-кит. Выдергиваем оттуда SrvAny.exe и InstSrv.exe. Далее, для удобства будем считать, что SrvAny.exe и InstSrv.exe лежат у нас в папке c:\autorun\bin. Создаем там же runatsart.bat (пока пустой).
В командной сроке набираем:
Код:
c:\autorun\bin\instsrv RunAtStart c:\autorun\bin\srvany.exe

тем самым, устанавливая SrvAny в качестве сервиса с именем RunAtStart. Можно зайти в список сервисов и убедиться в этом. Дальше... Создаем .reg файл:

Код:
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RunAtStart]
"DisplayName"="RunAtStart"
"Description"="Run custom commands at System Startup"

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RunAtStart\Parameters]
"Application"="c:\\windows\\system32\\cmd.exe"
"AppParameters"="/c RunAtStart.bat"
"AppDirectory"="c:\\autorun\\bin"
"AppEnvironment"=""

Обращаем внимание на строку:
Код:
"Application"="c:\\windows\\system32\\cmd.exe"

Для Windows 2000 надо поменять путь c:\\windows на c:\\winnt

Импортируруем созданный файл в реестр. После этого задаем вновь созданному сервису RunAtStart режим запуска Auto.

Теперь время редактировать RunAtStart.bat. Его содержимое примерно такое:

Код:
@echo off
if %1.==:. goto %2
setlocal
chcp 1251

set log=c:\autorun\logs\RunAtSart.log
set rundir=c:\autorun\run

echo RunAtStart: Running at %date% %time% >>%log%
for %%i in (%rundir%\*.*) do call %0 : do_run "%%~ni" "%%i"
net stop RunAtStart

goto eof
:do_run
echo Run: %~4 >>%log%
start "%~3" "%~4"
goto eof
:eof


Две переменные log и rundir можно изменять, с учетом ваших требований (не забудьте создать соответсствующие каталоги. Все готово. Перезагружаем систему, заглядываем в файл c:\autorun\logs\RunAtSart.log, видим там дату загрузки системы и список запущеных программ. Самих программ на экране мы не видим. И возможности увидеть их у нас нет :(. Максимум что мы можем сделать – увидеть их диспетчере задач и там же завершить их выполнение.

Механизм всего этого такой:

при старте системы запускается сервис RunAtStart (SrvAny.exe)
в свою очередь он запускает, заданную в параметрах (в реестре), команду: c:\windows\cmd.exe /c RunAtStart.bat
RunAtStart.bat запускает все найденные файлы в каталоге c:\autorun\run

Важно! По умолчанию запуск программ происходит от имени пользователя System, поэтому могут быть проблемы с правами, особенно на сетевых дисках.
Этим методом можно запускать программы не выводящие на экран каких либо вопросов, сообщений с приглашением нажать OK и т.п. Из за того, что мы не имеем возможности взаимодействовать с запущеной программой, выдав диалоговой окно с вопросом, она так и будет ждать реакции пользователя... Мы же об этом так и не узнаем. Поэтому, например в bat-файлах, нужно избегать команды pause, часто добавляемой для отладки, и применять вместо нее конструкцию:
Код:
if defined user pause

Однако на время отладки можно включить галочку Allow Sevice Interact With Desktop в настройках сервиса. Это позволит нам видеть окна запущеных программ и взаимодействовать с ними.

Примечание: Удалить установленный сервис можно командой:
Код:
c:\autorun\bin\instsrv RunAtStart remove


Я не злопамятный, я просто часто ковыряю логи
Изображение


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ 1 сообщение ] 
   Похожие темы   Автор   Ответов   Просмотров   Последнее сообщение 
Перенесенная ^_^

в форуме Linux

root

3

38

02 мар 2010, 16:15

Gen1us2k Перейти к последнему сообщению

Нет новых непрочитанных сообщений в этой теме Опубликован пакетный менеджер GNU Guix 0.12 и дистрибутив...

в форуме Новости *nix

[Ботя]

0

337

23 дек 2016, 13:30

Гость Перейти к последнему сообщению

Нет новых непрочитанных сообщений в этой теме Хелп! Настройка локального сервера на ВИН2003 машине

[ На страницу: 1, 2 ]

в форуме Networks

Sevato

11

3280

24 авг 2015, 12:01

Raven Перейти к последнему сообщению



Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Собрано Raven. Русская поддержка phpBB
phpBB SEO