From: Anton Borisov <a.borisov@tesv.tmb.ru>
Newsgroups: email
Date: Mon, 24 Feb 2004 14:31:37 +0000 (UTC)
Subject: [Windows] Создание простейшего сервиса на основе пакетного ".cmd" файла.
Краткая предыстория. Была поставлена команда в кратчайшие сроки создать
пакет, который удалял бы лишние одноименные приложения в системе.
Времени на развертывание Visual Studio или подобных продуктов нет. И уж
тем более не хватает времени на проектирование пакета. Поэтому требуется
собрать из подручных средств необходимый сервис.
Для этого нам потребуются следующие файлы из Resource Kit для Windows
2000: ps.exe, kill.exe, sleep.exe, instsrv.exe, srvany.exe. Вместо kill
и ps я использовал утилиты с сайта http://www.sysinternals.com под названиями
pslist, pskill.
Итак, файлы, которые использовались имеют следующие размеры.
Файл сервиса я назвал так по названию одноименного фильма Квентина Тарантино :)
Далее идет распечатка самого сервиса:
@Echo Off
REM ========================================================
REM 'KillBill' test service
REM killing every process with PID != "First in chain"
REM Anton Borisov, a.borisov@tesv.tmb.ru
REM 18 Feb 2004
REM ========================================================
set LOG=C:WinNTTempkillbill.log
set PID=C:WinNTTempkillbill.lst
set TIME=60
set PRG=Far
set MyCMD=KillBill
Echo "==========[ %MyCMD% Service startup! ]==========" >> %LOG%
time /t >> %LOG%
date /T >> %LOG%
:1
pslist | findstr %PRG% > %PID%
for /f "skip=1 tokens=2" %%I in ( %PID% ) do pskill %%I >> %LOG%
Echo "==========<< %MyCMD% terminated processes and sleeps now >>==========" >> %LOG%
time /t >> %LOG%
date /T >> %LOG%
Sleep.exe %TIME%
goto 1
О параметрах. В файл LOG складывается информация об "убитых" процессах и
текущая информация о времени старта, функционировании сервиса. В файл
PID записывается номера процессов, которые в системе обозначаются под
именами PRG (в данном случае ловим процессы под именем Far). Каждые 60
секунд проверяется количество приложений под именем "Far" и если их
количество больше 2, то второй и последующий процессы будут убиты.
Строка
for /f "skip=1 tokens=2" %%I in ( %PID% ) do pskill %%I >> %LOG%
занимается обработкой номеров процессов.
Файлы статистики и файл с номерами процессов складываются во временный
каталог C:WinNTTemp. Месторасположение файлов со статистикой, списком
процессов, времени проверки и имени процесса, как видите, задаются в
"killbill.cmd".
Установка сервиса:
1)Копируем файлы в каталог, например, (или в другое место, главное,
чтобы переменная PATH содержала этот путь) и переходим туда же
4)Переходим на ветку HKLMSystemCurrentControlSetServices в раздел killbill.cmd
5)Добавляем параметр: EDIT->Add Key под названием "Parameters" (Class="")
6)Переходим на созданный параметр и в него добавляем значение: Edit->
Add Value под названием Application (Data Type = REG_SZ, String = C:WinNTKillBill.cmd)
7)Закрываем редактор реестра
8)Из командной строки пишем: net start killbill.cmd
Все, процесс запущен и работает. Дальнейший пуск/остановка управляются
через меню Control Panel - > Services.
Посмотреть какие процессы были убиты сервисом, а также время его запуска
можно посмотреть в C:WinNTTempKillBill.log
В итоге собрали процесс, как модно сейчас говорить, "без специального
знания программных языков" ;-)
Антон Борисов, a.borisov@tesv.tmb.ru
18 Февраля 2004
556 Прочтений • [[Windows] Создание простейшего сервиса на основе пакетного ".cmd" файла. (win service)] [08.05.2012] [Комментариев: 0]