Текущий архив: 2006.07.30;
Скачать: CL | DM;
Вниз
Как запретить завершение процесса (программы)??? Найти похожие ветки
← →
vodvorezlaya (2006-04-10 10:17) [0]Как зарегистрировать программу как службу?
И как потом запретить её завершение???
← →
Leonid Troyanovsky © (2006-04-10 10:29) [1]
> vodvorezlaya (10.04.06 10:17)
> Как зарегистрировать программу как службу?
> И как потом запретить её завершение???
Для начала - написать ее как службу.
Потом - установить и зарегистрировать.
А завершать службы обычно разрешают админам.
--
Regards, LVT.
← →
vodvorezlaya (2006-04-10 10:57) [2]Прога написана мной на Дельфе и видна только в диспетчере задач, как поместить её в список служб и сделать так, что бы её никак нельзя было завершить?(через диспетчер задач)
заранее спасибо
← →
Leonid Troyanovsky © (2006-04-10 11:11) [3]
> vodvorezlaya (10.04.06 10:57) [2]
> Прога написана мной на Дельфе и видна только в диспетчере
> задач, как поместить её в
http://rsdn.ru/?summary/2393.xml
--
Regards, LVT.
← →
vodvorezlaya (2006-04-10 11:31) [4]Большое спасибо!!! Отлично, а на Дельфе есть подобное??????
← →
Чапаев © (2006-04-10 12:08) [5]
> а на Дельфе есть подобное?
File - New - Other... - Service Application
← →
vodvorezlaya (2006-04-10 13:57) [6]File - New - Other... - Service Application // отлично
а как теперь сделать так чтобы приложение нельзя было закрыть???????????
← →
Tirael © (2006-04-10 14:04) [7]поставь AllowStop в false
PS. ты терь так по кажд пункту спрашивать будешь? попробуй F1
← →
vodvorezlaya (2006-04-10 14:44) [8]F1 у меня английский, я как раз и ищу описание всего процесса (свойств и методов) уже 3 часа...
сенькс, уже чуть легче
← →
Tirael © (2006-04-10 15:46) [9]а F1 у всех английский :) учи инглишь :))
← →
Eraser © (2006-04-10 16:03) [10]
> vodvorezlaya (10.04.06 13:57) [6]
> а как теперь сделать так чтобы приложение нельзя было закрыть?
> ??????????
из ограниченного юзеровского аккаунта его по-умолчанию нельзя закрыть.
← →
Игорь Шевченко © (2006-04-10 17:52) [11]Пользователь с привилегиями администратора закроет все.
← →
Чапаев © (2006-04-10 18:27) [12]
> Пользователь с привилегиями администратора закроет все.
Ну, у Local system привилегии повыше будут... Не всегда и администратор закроет.
← →
Leonid Troyanovsky © (2006-04-10 21:29) [13]
> Чапаев © (10.04.06 18:27) [12]
> > Пользователь с привилегиями администратора закроет все.
> Ну, у Local system привилегии повыше будут... Не всегда
> и администратор закроет.
Админ админу - рознь (волк свинье - не товарищ).
--
Regards, LVT.
← →
Arazel © (2006-04-11 05:57) [14]vodvorezlaya (10.04.06 13:57) [6]
File - New - Other... - Service Application // отлично
а как теперь сделать так чтобы приложение нельзя было закрыть???????????
Вариянтов много... Можно:
Скрыть
а можно и многое
Как у AVP не устрайвает?
Игорь Шевченко © (10.04.06 17:52) [11]
Не все...
← →
vodvorezlaya (2006-04-11 09:57) [15]Есть процесс, с утра получилось.
Но, како показала практика, ЭТОТ ПРОЦЕСС НЕОБХОДИМО КОНТРОЛИРОВАТЬ И В СЛУЧАЕ ЕГО ОСТАНОВКИ ЗАПУСКАТЬ ЗАНОВО, ХЕЛП ПЛИЗ КАК ЭТО СДЕЛАТЬ??????????????????????????????????????????????
← →
Сергей И. (2006-04-11 10:08) [16]зайди в управление службами и поставь там запуск при сбое
← →
vodvorezlaya (2006-04-11 10:14) [17]я просто видел проги (с драйверами которые) контролируют службы и протоколируют их, а вот как взаимодействовать между службами???????????????????????????????????????
← →
Игорь Шевченко © (2006-04-11 10:33) [18]Arazel © (11.04.06 05:57) [14]
Все.
← →
vodvorezlaya (2006-04-11 15:37) [19]КАК СДЕЛАТЬ ЧТОБЫ ОДНА СЛУЖБА ПЕРЕГРУЖАЛА ДРУГУЮ В СЛУЧАЕ ее остановки, У МЕНЯ там NT старый стоит там нет такого как перезагрузка в случае ошибки
← →
Eraser © (2006-04-11 15:43) [20]
> vodvorezlaya (11.04.06 15:37) [19]
> У МЕНЯ там NT старый стоит там нет такого как
выкинуть NT, поставить XP.
> КАК СДЕЛАТЬ ЧТОБЫ ОДНА СЛУЖБА ПЕРЕГРУЖАЛА ДРУГУЮ
Обычно так делать не надо... опять же обычно, возможно есть исключения.
Как? Можно прямо "влоб", т.е. время от времени проверять статус сервиса, если остановлен - запускать... только зачем? лучше исправить глюки в сервисе, чтобы он не "падал" от того что кто-то громко дверью хлопнул.
← →
Leonid Troyanovsky © (2006-04-11 15:45) [21]
> vodvorezlaya (11.04.06 15:37) [19]
> ее остановки, У МЕНЯ там NT старый стоит там нет такого
> как перезагрузка в случае ошибки
Надавать надо по рукам, кто ее останавливает.
Или тому, кто так пишет службы.
Есть еще один вариант - надавать по рукам кто запускает
(бо, непонятно - на зачем).
Т.е., это - административная проблема.
И нех так кричать.
--
Regards, LVT.
← →
Anatoly Podgoretsky © (2006-04-11 15:52) [22]А выключать будем клавишей Reset
← →
vodvorezlaya (2006-04-12 08:11) [23]Выключать RESET - именно так и надо!!! Я за компом не слежу и чтоб никто левый не смог ее выключить!
А как запустить сервис в случае остановки програмно с другого?
может просто в событии OnShutdown или OnDestroy?
Я понял что проверять статус из одного процесса другим а как это сделать не хватает опыта!
← →
vodvorezlaya (2006-04-12 14:50) [24]Почему - то в этой службе не работает функция WinExec??????????????????????????????????
← →
Eraser © (2006-04-12 14:52) [25]
> vodvorezlaya (12.04.06 08:11) [23]
а пароль поставить не пробовал? ))
← →
Leonid Troyanovsky © (2006-04-12 17:43) [26]
> vodvorezlaya (12.04.06 14:50) [24]
Это служба тебе сказала?
И поменяй клавиатуру, у тебя клавиши западают.
--
Regards, LVT.
← →
vodvorezlaya (2006-04-13 13:13) [27]Вот ты какой цвяточак аленькай!
program SvcCtrl;
type
DWORD = LongWord;
PDWORD = ^DWORD;
BOOL = LongBool;
PBOOL = ^BOOL;
SERVICE_STATUS = record
dwServiceType,
dwCurrentState,
dwControlsAccepted,
dwWin32ExitCode,
dwServiceSpecificExitCode,
dwCheckPoint,
dwWaitHint: DWORD;
end;
PSERVICE_STATUS = ^SERVICE_STATUS;
function SetErrorMode(
uMode: DWORD
): DWORD;
stdcall; external "kernel32.dll" name "SetErrorMode";
function ChangeServiceConfigA(
hService,
dwServiceType,
dwStartType,
dwErrorControl: DWORD;
lpBinaryPathName,
lpLoadOrderGroup: PAnsiChar;
lpdwTagId: PDWORD;
lpDependencies,
lpServiceStartName,
lpPassword,
lpDisplayName: PAnsiChar
): BOOL;
stdcall; external "advapi32.dll" name "ChangeServiceConfigA";
function ChangeServiceConfigW(
hService,
dwServiceType,
dwStartType,
dwErrorControl: DWORD;
lpBinaryPathName,
lpLoadOrderGroup: PWideChar;
lpdwTagId: PDWORD;
lpDependencies,
lpServiceStartName,
lpPassword,
lpDisplayName: PWideChar
): BOOL;
stdcall; external "advapi32.dll" name "ChangeServiceConfigW";
function OpenServiceA(
hSCManager: DWORD;
lpServiceName: PAnsiChar;
dwDesiredAccess: DWORD
): DWORD;
stdcall; external "advapi32.dll" name "OpenServiceA";
function OpenServiceW(
hSCManager: DWORD;
lpServiceName: PWideChar;
dwDesiredAccess: DWORD
): DWORD;
stdcall; external "advapi32.dll" name "OpenServiceW";
function OpenSCManagerA(
lpMachineName,
lpDatabaseName: PAnsiChar;
dwDesiredAccess: DWORD
): DWORD;
stdcall; external "advapi32.dll" name "OpenSCManagerA";
function OpenSCManagerW(
lpMachineName,
lpDatabaseName: PWideChar;
dwDesiredAccess: DWORD
): DWORD;
stdcall; external "advapi32.dll" name "OpenSCManagerW";
function CloseServiceHandle(
hSCObject: DWORD
): BOOL;
stdcall; external "advapi32.dll" name "CloseServiceHandle";
function ControlService(
//
hService,
dwControl: DWORD;
lpServiceStatus: PSERVICE_STATUS
): BOOL;
stdcall; external "advapi32.dll" name "ControlService";
CONST
SEM_FAILCRITICALERRORS = $00000001;
SEM_NOGPFAULTERRORBOX = $00000002;
SEM_NOALIGNMENTFAULTEXCEPT = $00000004;
SEM_NOOPENFILEERRORBOX = $00008000;
STANDARD_RIGHTS_REQUIRED = $000F0000;
SERVICE_NO_CHANGE = $FFFFFFFF;
SERVICE_BOOT_START = $00000000;
SERVICE_SYSTEM_START = $00000001;
SERVICE_AUTO_START = $00000002;
SERVICE_DEMAND_START = $00000003;
SERVICE_DISABLED = $00000004;
SERVICE_ERROR_IGNORE = $00000000;
SERVICE_ERROR_NORMAL = $00000001;
SERVICE_ERROR_SEVERE = $00000002;
SERVICE_ERROR_CRITICAL = $00000003;
SERVICE_QUERY_CONFIG = $0001;
SERVICE_CHANGE_CONFIG = $0002;
SERVICE_QUERY_STATUS = $0004;
SERVICE_ENUMERATE_DEPENDENTS = $0008;
SERVICE_START = $0010;
SERVICE_STOP = $0020;
SERVICE_PAUSE_CONTINUE = $0040;
SERVICE_INTERROGATE = $0080;
SERVICE_USER_DEFINED_CONTROL = $0100;
SERVICE_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED
or SERVICE_QUERY_CONFIG
or SERVICE_CHANGE_CONFIG
or SERVICE_QUERY_STATUS
or SERVICE_ENUMERATE_DEPENDENTS
or SERVICE_START
or SERVICE_STOP
or SERVICE_PAUSE_CONTINUE
or SERVICE_INTERROGATE
or SERVICE_USER_DEFINED_CONTROL);
SC_MANAGER_CONNECT = $0001;
SC_MANAGER_CREATE_SERVICE = $0002;
SC_MANAGER_ENUMERATE_SERVICE = $0004;
SC_MANAGER_LOCK = $0008;
SC_MANAGER_QUERY_LOCK_STATUS = $0010;
SC_MANAGER_MODIFY_BOOT_CONFIG = $0020;
SC_MANAGER_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED
or SC_MANAGER_CONNECT
or SC_MANAGER_CREATE_SERVICE
or SC_MANAGER_ENUMERATE_SERVICE
or SC_MANAGER_LOCK
or SC_MANAGER_QUERY_LOCK_STATUS
or SC_MANAGER_MODIFY_BOOT_CONFIG);
SERVICES_ACTIVE_DATABASEW:PWideChar = "ServicesActive";
SERVICES_FAILED_DATABASEW:PWideChar = "ServicesFailed";
SERVICES_ACTIVE_DATABASEA:PAnsiChar = "ServicesActive";
SERVICES_FAILED_DATABASEA:PAnsiChar = "ServicesFailed";
SERVICE_CONTROL_STOP = $00000001;
SERVICE_CONTROL_PAUSE = $00000002;
SERVICE_CONTROL_CONTINUE = $00000003;
SERVICE_CONTROL_INTERROGATE = $00000004;
SERVICE_CONTROL_SHUTDOWN = $00000005;
SERVICE_CONTROL_PARAMCHANGE = $00000006;
SERVICE_CONTROL_NETBINDADD = $00000007;
SERVICE_CONTROL_NETBINDREMOVE = $00000008;
SERVICE_CONTROL_NETBINDENABLE = $00000009;
SERVICE_CONTROL_NETBINDDISABLE = $0000000A;
SERVICE_CONTROL_DEVICEEVENT = $0000000B;
SERVICE_CONTROL_HARDWAREPROFILECHANGE = $0000000C;
SERVICE_CONTROL_POWEREVENT = $0000000D;
SERVICE_CONTROL_SESSIONCHANGE = $0000000E;
var
hSCM,hSVC: DWORD;
SS: SERVICE_STATUS;
begin
//подавление сообщений об ошибках со стороны Delphi Runtime
NoErrMsg := TRUE;
//подавление сообщений об ошибках со стороны системы
SetErrorMode(SEM_FAILCRITICALERRORS
or SEM_NOGPFAULTERRORBOX
or SEM_NOOPENFILEERRORBOX);
//открываем SCM с полным доступом (как админ)
hSCM := OpenSCManagerW( NIL,NIL,SC_MANAGER_ALL_ACCESS );
if (hSCM <> 0) then
begin
//открываем интересующий нас сервис
//например, Machine Debug Manager,
//с правами на изменение конфигурации,
//остановку, запуск,
//приостановку и возобновление работы
hSVC := OpenServiceA( hSCM,"MDM",SERVICE_CHANGE_CONFIG
or SERVICE_STOP
or SERVICE_START
or SERVICE_PAUSE_CONTINUE
or SERVICE_INTERROGATE);
if (hSVC <> 0) then
begin
//останавливаем MDM
ControlService(hSVC,SERVICE_CONTROL_STOP,@SS);
//изменяем конфигурацию сервиса
ChangeServiceConfigA(hSVC,SERVICE_NO_CHANGE,
SERVICE_DEMAND_START,SERVICE_NO_CHANGE,
NIL,NIL,NIL,NIL,NIL,NIL,NIL);
//закрываем хэндл сервиса
CloseServiceHandle(hSVC);
end;
//закрываем хэндл SCM
CloseServiceHandle(hSCM);
end;
end.
Сенькс всем, на третий день нашёл
Страницы: 1 вся ветка
Текущий архив: 2006.07.30;
Скачать: CL | DM;
Память: 0.56 MB
Время: 0.011 c