Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2006.07.30;
Скачать: [xml.tar.bz2];

Вниз

Как запретить завершение процесса (программы)???   Найти похожие ветки 

 
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 вся ветка

Форум: "WinAPI";
Текущий архив: 2006.07.30;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.56 MB
Время: 0.017 c
2-1152549870
Belorus
2006-07-10 20:44
2006.07.30
Доступ к MS SQL


2-1152259668
0bsid
2006-07-07 12:07
2006.07.30
Память и виртуальная память


2-1152413062
KLAUS
2006-07-09 06:44
2006.07.30
Работа с ресурсами


6-1142688356
Новочеркасский Волк
2006-03-18 16:25
2006.07.30
2 месяца не могу понять в чём ошибка?!?!?


15-1151668888
PSPF2003
2006-06-30 16:01
2006.07.30
Мертвые ссылки





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский