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

Вниз

Про QueryServiceConfig2 - _SERVICE_FAILURE_ACTIONS   Найти похожие ветки 

 
kami ©   (2005-11-09 23:07) [0]

Help, пожалуйста, а то никак не соображу :(

в mmc.exe в службах на закладке "Восстановление" отображается отдельно путь к запускаемой программе, отдельно - ее параметры и + "дописать в командную строку счетчик ошибок".
Не соображу, как "вычленить" из _SERVICE_FAILURE_ACTIONS.lpCommand отдельно параметры командной строки и отдельно это "дописать..."

Ко всему вышесказанному - это что же, просматривать список _SERVICE_FAILURE_ACTIONS.lpsaActions отдельно для определения, будет ли служба вообще перезапускаться (отобразить, через какое время) и отдельно для определения - будет ли запускаться программа (тоже, чтобы отобразить это) ?


 
kami ©   (2005-11-10 16:54) [1]

Памагите, пожалуйста...

теперь вообще ничего не понимаю... У меня D5, в ней нет Query & ChangeServiceConfig2 и их структур... Пришлось самому определить. Проблема в том, что, при получении TServiceFailureActions.lpCommand и lpRebootMSG из QueryServiceConfig2 - исчезают первые от 10 до 25 символов в этих строках.
Подскажите, что я делаю не так? Вроде, все объявил,как положено...
type
 // объявление структур
 TSCActionType=DWORD;
 TSCAction=record
   SCAction:TSCActionType;
   Delay:DWord;
 end;

 pSCActions=^TSCActions;
 TSCActions=array [0..2] of TSCAction;

 pServiceFailureActions=^TServiceFailureActions;
 TServiceFailureActions=record
   dwResetPeriod:DWord;
   lpRebootMsg:PChar;
   lpCommand:PChar;
   cActions:DWord;
   lpsaActions:pSCActions;
 end;
// и функций
function QueryServiceConfig2(hHandle:THandle;dwInfoLevel:DWord;buffer:pServiceFailureActions;
       cbBufSize:DWord;var pcbBytesNeeded:DWord):BOOL;stdcall;
         external "Advapi32.dll" name "QueryServiceConfig2A" ;
function ChangeServiceConfig2(hService:THandle;dwInfoLevel:DWORD;lpInfo:Pointer):BOOL;stdcall;
         external "advapi32.dll" name "ChangeServiceConfig2A" ;


код :
procedure TForm1.Button1Click(Sender: TObject);// изменение параметров _Service_Failure_Actions сервиса
var
 hSC,hServ:THandle;
 p:pServiceFailureActions;
 pActions:pSCActions;
 i:bool;
begin
 hSC:=OpenSCManager(nil,nil,SC_MANAGER_ALL_ACCESS);
 hServ:=OpenService(hSC,"Alerter",SERVICE_ALL_ACCESS);// открываем сервис "Оповещатель" (к примеру)

 GetMem(pActions,SizeOf(TSCActions));
 pActions^[0].SCAction:=SC_ACTION_RUN_COMMAND;
 pActions^[0].Delay:=0;
 
 GetMem(p,8192);
 p.lpRebootMsg:=nil;// не меняем
 p.dwResetPeriod:=0;
 p.lpCommand:="F:\FirstNeed\System\ProcessExplorer\procexp.exe";
 p.cActions:=1;
 p.lpsaActions:=pActions;

 i:=ChangeServiceConfig2(hServ,2,p);// отрабатывает нормально, в mmc.exe выводится все, что задал
 if not i then
   ShowMessage(IntToStr(GetLastError));

 FreeMem(pActions);
 FreeMem(p);
end;

procedure TForm1.Button2Click(Sender: TObject);// отображение изменений
var
 hSC,hServ:THandle;
 p:pServiceFailureActions;
 i:Cardinal;
 b:Bool;
begin
 hSC:=OpenSCManager(nil,nil,SC_MANAGER_ALL_ACCESS);
 hServ:=OpenService(hSC,"Alerter",SERVICE_ALL_ACCESS);

 GetMem(p,8192);// максимальный допустимый размер этой структуры
 b:=QueryServiceConfig2(hServ,2,p,8192,i);//вот здесь "исчезают" начальные символы из p.lpCommand, отображаемые в mmc.exe
 if not b then
   ShowMessage(IntToStr(GetLastError))
 else
   Form1.Caption:=p.lpCommand;

 FreeMem(p);
 CloseServiceHandle(hServ);
 CloseServiceHandle(hSC);
end;


 
umbra ©   (2005-11-10 18:40) [2]

а может TServiceFailureActions должна быть packed record?
просто предположение


 
kami ©   (2005-11-10 19:04) [3]

umbra ©   (10.11.05 18:40) [2]
Пробовал и Packed record - эффект тот же


 
kami ©   (2005-11-10 19:06) [4]

Остановился пока на получении значений из реестра - но мне это очень не нравится :(


 
Набережных С. ©   (2005-11-10 19:47) [5]

QueryServiceConfig2W


 
Набережных С. ©   (2005-11-10 19:47) [6]

В смысле, используй QueryServiceConfig2W :))


 
kami ©   (2005-11-11 08:52) [7]

Прошу прощения - клиент форума что-то глюканул, видел только первые 4 поста.

Набережных С. ©   (10.11.05 19:47) [6]
Ого !!! :))
Все получилось. А почему так ? В смысле, это мои кривые руки или что-то (с надеждой в голосе :-) ) MS намудрил ?


 
Набережных С. ©   (2005-11-11 09:11) [8]


> kami ©   (11.11.05 08:52) [7]

Насколько мне известно - глюк, благополучно перекочевавший из W2kPro.
Хотя я особо не интересовался, W-версия работает, и ладно:)


 
kami ©   (2005-11-11 13:19) [9]

Набережных С. ©   (11.11.05 9:11) [8]
Понятно, спасибо большое.



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

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

Наверх




Память: 0.49 MB
Время: 0.026 c
14-1131012564
Bazi
2005-11-03 13:09
2005.11.27
Какие ограничения накладывает каждая версия Делфи?


5-1113565924
имя
2005-04-15 15:52
2005.11.27
Внимание Подлог!!!


2-1131801001
KostR
2005-11-12 16:10
2005.11.27
Можно ли програмно сравнить две даты?


2-1131441509
Ольга
2005-11-08 12:18
2005.11.27
Как первую запись в DBGrid сделать выбранной


2-1131314313
Michael5
2005-11-07 00:58
2005.11.27
Заклинило на примитивной вещи - не могу отредактировать запись!