![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
How Create a System Service [Install Service] (создать службу) [D6, D7, NT4, Win2k, WinXP]
H.A.Z.A.R.D. © (2004-11-17 14:46:00)Подскажите пожалуйста КОДдля моего SysMon'a. Мне необходимо, чтобы моя программа работала как сервис и юзеры не смогли ее просто так убить под Win2k/XP. Прога следит за хендлами кое-каких файлов и если находит их, то "глушит", причем с "похоронным маршем". В данным момент я использую AppToService.exe 2.7 для установки свой программки, но меня это не устраивает, я хочу по человечески написать инсталлятор, который делает мою прогу службой. Так сказать SysMonitor :). Извиняюсь если этот вопрос уже здесь писали, но нету времени искать...
Далее будут вопросы чтобы это был еще и сетевой ресурс (мне нужно собирать логи с машин каждый день, запускали ли юзеры запрещенные игрушки или нет), но это не самое важное пока...
ЗЫ. Работаю в ВУЗе Сис-Опом.
H.A.Z.A.R.D. (2004-11-20 15:23:00) [1]Aleks
я в курсах по поводу services.exe, но в таком случае apptoservice.exe круче! Даже под админовским аккаунтом неззя ее просто так убить (имеется в виду таскбар), только через управление или .... или..или..или. В общем понятон мне стало, что никто помочь не сможет. Лады, будем искать в др. месте.
Digitman, про орехи забудем, я сюда не прикалываться зашел, лучше дай линк на инфу по визардам, т.к. я в делфях сижу редко, но метко, в основном я сижу на internet приложениях (php,mysql,java, etc...). Вот. Поэтому тонкостей не знаю. Знаю вот, что, для создания сервиса средствами делфи необходимо создавать консольное приожение. Почему? Точнее, я немогу использовать консольное, у меня же форма с таймером и TClientSocket'ом, без них никак. В общем 2 дня голова болит, давно так в делфях не засиживался. Хотя какая разница, делфи не делфи, главное уметь! :)
ЗЫ?: есть у меня код для создания/удаление сервиса (WinAPI), но он не пашет, служба создается, но не запускается, в чем прикол не пойму. И что самое главное - время не ждет. H.A.Z.A.R.D. © Вот, ладно, скажите, в чем ошибка?
Где, что не правильно?
function CreateNTService(ExecutablePath, ServiceName: string): boolean;
var
hNewService, hSCMgr: SC_HANDLE;
// Rights: DWORD;
FuncRetVal: Boolean;
begin
FuncRetVal := False;
hSCMgr := OpenSCManager(nil, nil, SC_MANAGER_CREATE_SERVICE);
if (hSCMgr 0) then
begin
hNewService := CreateService(hSCMgr, PChar(ServiceName), PChar(ServiceName),
STANDARD_RIGHTS_REQUIRED, SERVICE_WIN32_OWN_PROCESS,
SERVICE_DEMAND_START, SERVICE_ERROR_NORMAL,
PChar(ExecutablePath), nil, nil, nil, nil, nil);
CloseServiceHandle(hSCMgr);
if (hNewService 0) then
FuncRetVal := true
else
FuncRetVal := false;
end;
CreateNTService := FuncRetVal;
end;
// ***
function DeleteNTService(ServiceName: string): boolean;
var
hServiceToDelete, hSCMgr: SC_HANDLE;
RetVal: LongBool;
FunctRetVal: Boolean;
begin
FunctRetVal := false;
hSCMgr := OpenSCManager(nil, nil, SC_MANAGER_CREATE_SERVICE);
if (hSCMgr 0) then
begin
hServiceToDelete := OpenService(hSCMgr, PChar(ServiceName),
SERVICE_ALL_ACCESS);
RetVal := DeleteService(hServiceToDelete);
CloseServiceHandle(hSCMgr);
FunctRetVal := RetVal;
end;
DeleteNTService := FunctRetVal;
end;
(код не мой, и не знаю чей, но если бы знал, жалоб бы настрочил 2 страницы, ни комментов ни фига) Alekc 1. Я тебе кинул линк на пример, там тоже не слишком много комментов, но по крайней мере работает.
2. Код
hNewService := CreateService(hSCMgr, PChar(ServiceName), PChar(ServiceName),
STANDARD_RIGHTS_REQUIRED, SERVICE_WIN32_OWN_PROCESS,
SERVICE_DEMAND_START, SERVICE_ERROR_NORMAL,
PChar(ExecutablePath), nil, nil, nil, nil, nil);
создаёт сервис, но не запускает его. Смотри в справке ф-цию StartService (кажется). SERVICE_DEMAND_START- этот флаг говорит, что сервис должен запускаться вручную!
> Знаю вот, что, для создания сервиса средствами делфи необходимо
> создавать консольное приожение.
Кто тебе сказал такой бред ? H.A.Z.A.R.D. © Alekc
в том, примере, который я написал сервис вообще не запускается, ни руками, ни ногами! Автоматом тем более не хочет, явно чего-то в коде не хватает.
Насчет консоли, это в какой-то статье, но я и сам думаю, что это бред. sniknik © http://delphi.chertenok.ru/forum/my_download.php?tema=del&action=show&id=173
и запускается и стартует, разбирайся сам, писалось очень давно (гдето за полгода до того как туда выкладывалось) и больше этой темой не занимался, т.что разберешся хорошо, нет и не спрашивай ;о)). Xaker © sniknik © (22.11.04 11:46) [13]
классный там сервис - реально хорошо работает ! sniknik © Xaker © (22.11.04 11:47) [14]
спасибо. ;о))
там один небольшой "недостаток", если можно так сказать, тот поток в котором он работает на самом деле лишний, сервис и так стартует в отдельном, т.что смысла в нем нет. об этом и написано, что это просто пример (можно так, можно без него) но часто почемуто на это внимания не обращают а принимают как руководство к действию, типа так и должно быть. H.A.Z.A.R.D. © Спасибо тебе sniknik, рульную штуку дал.
Рульную потому, что она действительно рулит. К своему проекту еще не подцепил, но то что она функционирует на "отлично", это действительно так.
AppToService.exe, буржуйская, небесплатная, глючная программа. Глючная потому, что хоть и стоит как "Авто" - работает как "мать твою так". Глюк заключается (даже не глюк, а баг работающий как см.выше) в том, что если я сделаю выход из системы (текущий пользователь в системе к примеру Student), и зайду снова в систему, то моя программа зависящая от этого AppToService и сам AppToService уже не висит и не висят в процессах, т.е. они второй раз не запускаются, а только при старте Windows, значит никакие они не системные, а "косят под них".
Я пока не фтыкнул код сервиса в свою программу, но проверил, что хоть 20, хоть 30 раз входи и выходи из системы, данный сервис (в примере он обозвался как ApiServ.exe с заголовком "$ Нихрена пока не делает") работает как надо.
Все, большое всем спасибо господа ученые. Мне все помогли в какой-то мере.
Если хотите я могу написать что моя простая как сибирский валенок программа делает, могу даже исходник выложить, т.к. все банально просто. :)
(жалко, не успел увидеть, что там написали kaZaNoVa & Вут:-)
[ps: баг у apptoservice увидел буквально пару минут назад, до этого внимания не обращал]
[pps: по существу прога нужна для того, чтобы мне зарплату не урезали, я ведь работаю системным оператором на 3 зала аж, студенты "умные" таскают из дома всякую фигню и на парах сидят играют, мне надоело каждому повторять, нужно чтобы они сами воочию видели, что играть тут нельзя. Теперь по характернуому
звуку можно определить, что студент запустил такую-то грушку :)) гыы]
{пример звукового сигнала, мне он понравился, писал я, поэтому материте если что меня :)}
function BeBeep(countsound:smallint):smallint;
var x:smallint;
begin
x:=0;
While (x
Alekc (2004-11-18 18:40:00) [2]Вот тут лежит заготовка для сервиса на чистом WinAPI:
http://alekc.nm.ru/xservice.zip
Но если ты хочешь чтобы твою прогу нельзя было убить из таск манагера, то просто назови её services.exe ;o)
Вут (2004-11-18 18:06:00) [3]Удалено модератором
Примечание: На хакерские сайты
Digitman (2004-11-18 13:18:00) [4]
> H.A.Z.A.R.D. © (17.11.04 16:19) [1]
> Почитал про ваши орехи
и, чувствуется, так и хочешь угодить в ту рощу
иначе бы хотя бы сподобился объяснить, почему не используешь стандартный Делфи-визард по созданию сервис-приложений и, соотв-но, станд.класс TServiceApplication
H.A.Z.A.R.D. (2004-11-18 08:11:00) [5]VMcL
если ты реально писал сервисы, то у тебя должен быть кусок исходника, кинь плз на мыло.
VMcL (2004-11-18 00:43:00) [6]>> H.A.Z.A.R.D. © (17.11.04 14:46)
OpenSCManager(), CreateService(), CloseServiceHandle()
kaZaNoVa (2004-11-17 23:48:00) [7]Удалено модератором
Примечание: Offtopic
Cobalt (2004-11-17 23:42:00) [8]Насколько я читал про сервисы тут, между прочим, в форуме, запуск сервиса с параметром /install регистрирует сервис.
А вообще-то, рекомендуется в таких случаях использовать SCM - так, кажется, называется. В общем, служба(в смысле, API), управляющая сервисами.
H.A.Z.A.R.D. (2004-11-17 16:19:00) [9]Почитал про ваши орехи :), надеюсь моего message там не будет :)