Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.068 c


Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский