Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.04.13;
Скачать: CL | DM;

Вниз

Запуск службы   Найти похожие ветки 

 
F@T@L_Err0r   (2008-03-17 11:12) [0]

Здравствуйте.Подскажите пожалуйста какиим образом програмно можно запустить виндовсскую службу и как перед этим получить ее имя?Понятно что под администратором.Зараннее спасибо!


 
Reindeer Moss Eater ©   (2008-03-17 11:17) [1]

uses WinSvc;


 
F@T@L_Err0r   (2008-03-17 11:22) [2]

Ето ???
BOOL ChangeServiceConfig(

   SC_HANDLE hService, // handle to service
   DWORD dwServiceType, // type of service
   DWORD dwStartType, // when to start service
   DWORD dwErrorControl, // severity if service fails to start
   LPCTSTR lpBinaryPathName, // pointer to service binary file name
   LPCTSTR lpLoadOrderGroup, // pointer to load ordering group name
   LPDWORD lpdwTagId, // pointer to variable to get tag identifier
   LPCTSTR lpDependencies, // pointer to array of dependency names
   LPCTSTR lpServiceStartName, // pointer to account name of service
   LPCTSTR lpPassword, // pointer to password for service account  
   LPCTSTR lpDisplayName  // pointer to display name
  );
Если да то возникает вопрос как получит handle of servise?
Если можно то приблизительный пример заполнения параметров...Пожалуйста...


 
clickmaker ©   (2008-03-17 11:24) [3]


> програмно можно запустить виндовсскую службу и как перед
> этим получить ее имя?

получить имя, зная что?
запустить - OpenService, StartService


 
F@T@L_Err0r   (2008-03-17 11:32) [4]

>получить имя, зная что?

Все имя я знаю...Точнее путь к екзешнику...А теперь вопрос.В  каком модуле находятся OpenService, StartService???


 
Reindeer Moss Eater ©   (2008-03-17 11:50) [5]

А в первом ответе тебе не сказали?


 
F@T@L_Err0r   (2008-03-17 13:02) [6]

А что писать во втором и третьим параметрах???
StartService("C:\WINDOWS\system32\svchost.exe -k netsvcs",?,?);
Не могу разобратся помогите плиз....


 
clickmaker ©   (2008-03-17 13:03) [7]


> [6] F@T@L_Err0r   (17.03.08 13:02)
> А что писать во втором и третьим параметрах???

ты сначала первый правильно укажи...


 
F@T@L_Err0r   (2008-03-17 13:08) [8]

я уже понял чт онада вызвать сначала OpenServise и то что он вернет нада подставить в первый аргумент функции StartServise но все же я не могу разобратся в остальных двух параметрах...подскажите....или пример...


 
clickmaker ©   (2008-03-17 13:15) [9]


> [8] F@T@L_Err0r   (17.03.08 13:08)

там количество аргументов командной строки и они сами, в виде массива строк (PChar, вернее)


 
Slym ©   (2008-03-17 13:20) [10]

var p:PChar;
begin
 p:=nil;
 if not StartService(Service,0,p) then
   RaiseLastOSError;
end;


 
F@T@L_Err0r   (2008-03-17 13:22) [11]

s:= OpenService(0,"C:\WINDOWS\system32\svchost.exe -k netsvcs",0);
StartService(s,0,0);
Где ошибка???Если количество аргументов то насколько я понимаю ето цифры?Или я не прав???


 
Skyle ©   (2008-03-17 13:26) [12]


> F@T@L_Err0r   (17.03.08 13:22) [11]
> s:= OpenService(0,"C:\WINDOWS\system32\svchost.exe -k netsvcs",
> 0);

Справку открывал по этим функциям? Вот только честно...


 
Slym ©   (2008-03-17 13:26) [13]

var
 SCManager:THandle;
 Service:THandle;
 p:PChar;
begin
   SCManager:=OpenSCManager("",nil,GENERIC_READ);
   if SCManager=0 then RaiseLastOSError;
   try
     Service:=OpenService(SCManager,"ИМЯ СЕРВИСА",SERVICE_QUERY_STATUS or SERVICE_START or SERVICE_STOP);
     if Service=0 then RaiseLastOSError;
     try
       p:=nil;
       if not StartService(Service,0,p) then
         RaiseLastOSError;
     finally
       CloseServiceHandle(Service);
     end;
   finally
     CloseServiceHandle(SCManager);
   end;


 
clickmaker ©   (2008-03-17 13:29) [14]


> Если количество аргументов то насколько я понимаю ето цифры?

нет. Буквы. Сумма прописью, как в квитанции, знаешь


 
F@T@L_Err0r   (2008-03-17 13:30) [15]

Хорошо...А имя сервиса ето что тогда???чето я ваще уже запутался...Ето имя которое русское???если нет то где его можно посмотреть???


 
Slym ©   (2008-03-17 13:32) [16]

F@T@L_Err0r   (17.03.08 13:30) [15]
...Ето имя которое русское???если нет то где его можно посмотреть???

нет нерусское...
в оснастке Службы
например служба "Удаленный вызов процедур (RPC)" имеет имя RpcSs


 
Skyle ©   (2008-03-17 13:34) [17]


> F@T@L_Err0r   (17.03.08 13:30) [15]
> Хорошо...А имя сервиса ето что тогда???чето я ваще уже запутался.
> ..Ето имя которое русское???если нет то где его можно посмотреть?
> ??

Пуск->Выполнить->services.msc->На нужном сервисе правой кнопкой, Свойства, смотреть "имя службы".


 
F@T@L_Err0r   (2008-03-17 13:35) [18]

var s:cardinal;
   p:PChar;
begin
p:=nil;
s:= OpenService(0,"Messenger",0);
StartService(s,0,p);

Сделал вот так но служба не запускается...Может я что то упустил???Имя службы правильное...


 
Сергей М. ©   (2008-03-17 13:38) [19]


> s:= OpenService(0,"Messenger",0);


0 указан от балды ?


 
F@T@L_Err0r   (2008-03-17 13:40) [20]

>0 указан от балды ?

Да, а что там нада???


 
Сергей М. ©   (2008-03-17 13:41) [21]


> Да


Молодец ! Что еще сказать ?)
Ты так всегда и лепишь свой код - "от балды" ?)


> а что там нада?


А разве в справке не написано ?


 
clickmaker ©   (2008-03-17 13:41) [22]


> [20] F@T@L_Err0r   (17.03.08 13:40)

может, все-таки поразбираешься в предмете интереса?
что такое service control manager, дескриптор сервиса, чем имя отличается от отображаемого имени...
а то напоминает попытки порулить джипом, умея ездить только на самокате


 
F@T@L_Err0r   (2008-03-17 13:44) [23]

>А разве в справке не написано ?

Написанно что ето service control manager - а что ето я не знаю...вот и спрашиваю у вас...более просвященных  в етом вопросе...Что мне нада там поставить что бы ето работало???


 
Сергей М. ©   (2008-03-17 13:46) [24]


> Написанно что ето service control manager - а что ето я
> не знаю


Угу.

А дальше черным по белому написано, откуда эта беда берется

The OpenSCManager function returns this handle.

Эт что, для пушкина писано ?)


 
Skyle ©   (2008-03-17 13:49) [25]


> F@T@L_Err0r   (17.03.08 13:44) [23]
> >А разве в справке не написано ?
>
> Написанно что ето service control manager - а что ето я
> не знаю...

Ну тогда и не заморачивайся.
Пиши просто
{get-service Messenger}.Start()


 
Slym ©   (2008-03-17 13:57) [26]

[13] бери и пользуй


 
Slym ©   (2008-03-17 13:59) [27]

Удалено модератором


 
F@T@L_Err0r   (2008-03-17 14:05) [28]

>[13] бери и пользуй

Спасибо большое ...работает...


 
F@T@L_Err0r   (2008-03-17 14:25) [29]

Врпрос. Аесли служба отключена то как ее сначала включить???Потому что если состояние службы - отключена ...то возникает ошибка...


 
F@T@L_Err0r   (2008-03-17 14:27) [30]

А если точнее то как установить тип запуска - авто???


 
Сергей М. ©   (2008-03-17 14:28) [31]


> F@T@L_Err0r   (17.03.08 14:25) [29]


см. ChangeServiceConfig


 
F@T@L_Err0r   (2008-03-17 14:38) [32]

Service:=OpenService(SCManager,"Messenger",SERVICE_QUERY_STATUS or SERVICE_START or SERVICE_STOP);
ChangeServiceConfig(Service,SERVICE_WIN32_OWN_PROCESS,SERVICE_AUTO_START,SERVICE _NO_CHANGE,nil,nil,nil,nil,nil,nil,nil);

Делаю вот так...Но ничего не меняется...


 
clickmaker ©   (2008-03-17 14:42) [33]


> [32] F@T@L_Err0r   (17.03.08 14:38)

сам как думаешь, если меняешь конфигурацию, какие права доступа нужно запросить?


 
F@T@L_Err0r   (2008-03-17 14:44) [34]

>сам как думаешь, если меняешь конфигурацию, какие права доступа нужно запросить?

Не ну я ж под админом в винде сижу...


 
clickmaker ©   (2008-03-17 14:45) [35]


> Не ну я ж под админом в винде сижу

и что?
это избавляет от необходимости хелп читать?


 
Сергей М. ©   (2008-03-17 14:51) [36]


> я ж под админом в винде сижу


Да хоть лежи под админом !)

В справке черным по белому написано, какие параметры нужно указать при вызове OpenService для того чтобы иметь право на изменение конфигурации открытого тобой сервиса.


 
F@T@L_Err0r   (2008-03-17 15:00) [37]

var
SCManager:THandle;
Service:THandle;
p:PChar;
begin
  SCManager:=OpenSCManager("",nil,GENERIC_READ);
  if SCManager=0 then RaiseLastOSError;
    Service:=OpenService(SCManager,"Messenger",SERVICE_CHANGE_CONFIG or SERVICE_START or SERVICE_STOP);
    ChangeServiceConfig(Service,SERVICE_INTERACTIVE_PROCESS,SERVICE_AUTO_START,SERVI CE_NO_CHANGE,nil,nil,nil,nil,nil,nil,nil);

так что ли??


 
Сергей М. ©   (2008-03-17 15:03) [38]


> так что ли?


Так и будешь по каждому чиху проверяться ?)


 
F@T@L_Err0r   (2008-03-17 15:14) [39]

>Так и будешь по каждому чиху проверяться ?)

Не ну реально не могу разобратся...поетому и прошу помощи...И справку я уже перчитал 100 раз...ну не вижу я где написанно с какими параметрами нада запускать OpenService что бы можно было изменять свойства...


 
clickmaker ©   (2008-03-17 15:20) [40]


> И справку я уже перчитал 100 раз...ну не вижу я где написанно
> с какими параметрами нада запускать OpenService что бы можно
> было изменять свойства

а это что?

BOOL ChangeServiceConfig(
   SC_HANDLE hService,
...

hService

Identifies the service. This handle is returned by the OpenService or CreateService function and must have SERVICE_CHANGE_CONFIG access.


 
Сергей М. ©   (2008-03-17 15:22) [41]


> е вижу я где написанно


Врешь)

Это

SERVICE_CHANGE_CONFIG Enables calling of the ChangeServiceConfig function to change the service configuration

видишь ?


 
F@T@L_Err0r   (2008-03-17 15:24) [42]

var
SCManager:THandle;
Service:THandle;
p:PChar;
begin
 SCManager:=OpenSCManager("",nil,GENERIC_READ);
 if SCManager=0 then RaiseLastOSError;
   Service:=OpenService(SCManager,"Messenger",SERVICE_CHANGE_CONFIG or SERVICE_START or SERVICE_STOP);
   ChangeServiceConfig(Service,SERVICE_INTERACTIVE_PROCESS,SERVICE_AUTO_START,SERVI  CE_NO_CHANGE,nil,nil,nil,nil,nil,nil,nil);

Ну дак а я как делаю...вроде б все так же...где же я допустил ошибку...


 
Сергей М. ©   (2008-03-17 15:31) [43]


> где же я допустил ошибку


Какой ты, однако, мнительный)

Ты у системы спроси, ошибся ты или не ошибся и если ошибся то в чем конкретно !

На то и система, чтобы следить за ошибочностью твоих действий)

Service:=OpenService(чего-то там);
Win32Check(Service <> 0);
Win32Check(ChangeServiceConfig(чего-то там));


 
F@T@L_Err0r   (2008-03-17 15:35) [44]

Пишет что отказано в доступе...Но блин ведь все так как в справке...ниче не понимаю...


 
Сергей М. ©   (2008-03-17 15:40) [45]


> блин ведь все так как в справке


Не-а .. все да не все) ..

Перечитывай справку по параметрам OpenSCManager


 
F@T@L_Err0r   (2008-03-17 15:50) [46]

Сделал SCManager:=OpenSCManager("",nil,GENERIC_Write);
Тот же результат...


 
Сергей М. ©   (2008-03-17 15:54) [47]

А параметр SC_MANAGER_ALL_ACCESS ты там видел ?


 
F@T@L_Err0r   (2008-03-17 15:57) [48]

>А параметр SC_MANAGER_ALL_ACCESS ты там видел ?

Пробывал то же самое...Отказано в доступе...


 
Сергей М. ©   (2008-03-17 16:08) [49]

Выясни, какая конкретно ф-ция возвращает этот отказ


 
F@T@L_Err0r   (2008-03-17 16:37) [50]

WIn32Check(ChangeServiceConfig(Service,SERVICE_NO_CHANGE,SERVICE_AUTO_START,SERV ICE_NO_CHANGE,nil,nil,nil,nil,nil,nil,nil));

Вот эта...Но  в ней вроде б все правильно...


 
Сергей М. ©   (2008-03-17 16:39) [51]


> SERVICE_NO_CHANGE,SERVICE_AUTO_START,SERV ICE_NO_CHANGE


Фигню написал - фигню и получил.
ты сам-то понял, что ты тут понацарапал ?)


 
F@T@L_Err0r   (2008-03-17 16:56) [52]

Ну ваще то ето уже модификация после очередног оексперемента ... в оригенале ето выглядит так:
WIn32Check(ChangeServiceConfig(Service,SERVICE_WIN32_OWN_PROCESS ,SERVICE_AUTO_START,SERVICE_NO_CHANGE,nil,nil,nil,nil,nil,nil,nil));
А второй параметр SERV ICE_NO_CHANGE ето параметр отвечает насколько я понял из спрвки за восстановление после сбоя или я не прав???
dwErrorControl

Specifies the severity of the error if this service fails to start during startup, and determines the action taken by the startup program if failure occurs. One of the following values can be specified:

Value Meaning
SERVICE_ERROR_IGNORE The startup (boot) program logs the error but continues the startup operation.
SERVICE_ERROR_NORMAL The startup program logs the error and puts up a message box pop-up but continues the startup operation.
SERVICE_ERROR_SEVERE The startup program logs the error. If the last-known-good configuration is being started, the startup operation continues. Otherwise, the system is restarted with the last-known-good configuration.
SERVICE_ERROR_CRITICAL The startup program logs the error, if possible. If the last-known-good configuration is being started, the startup operation fails. Otherwise, the system is restarted with the last-known good configuration.
SERVICE_NO_CHANGE The existing StartType value is not to be changed.


 
Сергей М. ©   (2008-03-17 17:03) [53]

http://forum.chertenok.ru/faq_online.php?n=114



Страницы: 1 2 вся ветка

Текущий архив: 2008.04.13;
Скачать: CL | DM;

Наверх




Память: 0.57 MB
Время: 0.007 c
15-1204078326
Fon
2008-02-27 05:12
2008.04.13
Google Summer of Code 2008


2-1205862569
Tovarisch
2008-03-18 20:49
2008.04.13
Не пишет первое слово


15-1204265877
kiberg
2008-02-29 09:17
2008.04.13
Заполнение массива


2-1205626460
alert2006
2008-03-16 03:14
2008.04.13
Заменить в файле


2-1205845556
Adios
2008-03-18 16:05
2008.04.13
сообщения в программу по сети





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