Форум: "WinAPI";
Текущий архив: 2005.01.09;
Скачать: [xml.tar.bz2];
ВнизHow Create a System Service [Install Service] (создать службу) Найти похожие ветки
← →
H.A.Z.A.R.D. © (2004-11-17 14:46) [0]Подскажите пожалуйста КОД для моего SysMon"a. Мне необходимо, чтобы моя программа работала как сервис и юзеры не смогли ее просто так убить под Win2k/XP. Прога следит за хендлами кое-каких файлов и если находит их, то "глушит", причем с "похоронным маршем". В данным момент я использую AppToService.exe 2.7 для установки свой программки, но меня это не устраивает, я хочу по человечески написать инсталлятор, который делает мою прогу службой. Так сказать SysMonitor :). Извиняюсь если этот вопрос уже здесь писали, но нету времени искать...
Далее будут вопросы чтобы это был еще и сетевой ресурс (мне нужно собирать логи с машин каждый день, запускали ли юзеры запрещенные игрушки или нет), но это не самое важное пока...
ЗЫ. Работаю в ВУЗе Сис-Опом.
← →
H.A.Z.A.R.D. © (2004-11-17 16:19) [1]Почитал про ваши орехи :), надеюсь моего message там не будет :)
← →
Cobalt © (2004-11-17 23:42) [2]Насколько я читал про сервисы тут, между прочим, в форуме, запуск сервиса с параметром /install регистрирует сервис.
А вообще-то, рекомендуется в таких случаях использовать SCM - так, кажется, называется. В общем, служба(в смысле, API), управляющая сервисами.
← →
kaZaNoVa © (2004-11-17 23:48) [3]Удалено модератором
Примечание: Offtopic
← →
VMcL © (2004-11-18 00:43) [4]>>H.A.Z.A.R.D. © (17.11.04 14:46)
OpenSCManager(), CreateService(), CloseServiceHandle()
← →
H.A.Z.A.R.D. © (2004-11-18 08:11) [5]VMcL
если ты реально писал сервисы, то у тебя должен быть кусок исходника, кинь плз на мыло.
← →
Digitman © (2004-11-18 13:18) [6]
> H.A.Z.A.R.D. © (17.11.04 16:19) [1]
> Почитал про ваши орехи
и, чувствуется, так и хочешь угодить в ту рощу
иначе бы хотя бы сподобился объяснить, почему не используешь стандартный Делфи-визард по созданию сервис-приложений и, соотв-но, станд.класс TServiceApplication
← →
Вут (2004-11-18 18:06) [7]Удалено модератором
Примечание: На хакерские сайты
← →
Alekc (2004-11-18 18:40) [8]Вот тут лежит заготовка для сервиса на чистом WinAPI:
http://alekc.nm.ru/xservice.zip
Но если ты хочешь чтобы твою прогу нельзя было убить из таск манагера, то просто назови её services.exe ;o)
← →
H.A.Z.A.R.D. © (2004-11-20 15:23) [9]Aleks
я в курсах по поводу services.exe, но в таком случае apptoservice.exe круче! Даже под админовским аккаунтом неззя ее просто так убить (имеется в виду таскбар), только через управление или .... или..или..или. В общем понятон мне стало, что никто помочь не сможет. Лады, будем искать в др. месте.
Digitman, про орехи забудем, я сюда не прикалываться зашел, лучше дай линк на инфу по визардам, т.к. я в делфях сижу редко, но метко, в основном я сижу на internet приложениях (php,mysql,java, etc...). Вот. Поэтому тонкостей не знаю. Знаю вот, что, для создания сервиса средствами делфи необходимо создавать консольное приожение. Почему? Точнее, я немогу использовать консольное, у меня же форма с таймером и TClientSocket"ом, без них никак. В общем 2 дня голова болит, давно так в делфях не засиживался. Хотя какая разница, делфи не делфи, главное уметь! :)
ЗЫ?: есть у меня код для создания/удаление сервиса (WinAPI), но он не пашет, служба создается, но не запускается, в чем прикол не пойму. И что самое главное - время не ждет.
← →
H.A.Z.A.R.D. © (2004-11-20 15:26) [10]Вот, ладно, скажите, в чем ошибка?
Где, что не правильно?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 (2004-11-20 17:15) [11]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. © (2004-11-22 10:53) [12]Alekc
в том, примере, который я написал сервис вообще не запускается, ни руками, ни ногами! Автоматом тем более не хочет, явно чего-то в коде не хватает.
Насчет консоли, это в какой-то статье, но я и сам думаю, что это бред.
← →
sniknik © (2004-11-22 11:46) [13]http://delphi.chertenok.ru/forum/my_download.php?tema=del&action=show&id=173
и запускается и стартует, разбирайся сам, писалось очень давно (гдето за полгода до того как туда выкладывалось) и больше этой темой не занимался, т.что разберешся хорошо, нет и не спрашивай ;о)).
← →
Xaker © (2004-11-22 11:47) [14]sniknik © (22.11.04 11:46) [13]
классный там сервис - реально хорошо работает !
← →
sniknik © (2004-11-22 11:58) [15]Xaker © (22.11.04 11:47) [14]
спасибо. ;о))
там один небольшой "недостаток", если можно так сказать, тот поток в котором он работает на самом деле лишний, сервис и так стартует в отдельном, т.что смысла в нем нет. об этом и написано, что это просто пример (можно так, можно без него) но часто почемуто на это внимания не обращают а принимают как руководство к действию, типа так и должно быть.
← →
H.A.Z.A.R.D. © (2004-11-22 15:24) [16]Спасибо тебе 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<=countsound) do
begin
SysUtils.Beep;
Windows.Beep(1200-x,300);
x:=x+600;
end;
end;
далее в программе:BeBeep(8000);
BeBeep(4000);
BeBeep(8000);
BeBeep(4000);
конечно можно мелодию поменять, я не спорю, но мне эта нравится :)
← →
H.A.Z.A.R.D. © (2004-11-23 09:41) [17]И все таки нет! Не все так гладко, как я думал. Служба установлена, работает, но... есть одно.
При выходе из текущего сеанса (смена пользователя) моя служба останавливается и при входе опять же в тот же сеанс она не запускается, точнее в управлении показано, что она работает, но она не работает. То есть, в моей программе сейчас дыра, смысл затеи пропадает, достаточно выйти/зайти под текущим пользователем и можно играть снова в любые игры.
Просьба помочь с этим вопросом, что нужно сделать, чтобы и при перезагрузки и просто при выходе, а затем входе в сеанс пользователя моя служба не останавливалась а работала без передыху, хотя она и стоит как "Авто", но чего-то не хватает. :(
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2005.01.09;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.038 c