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

Вниз

Про 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.015 c
14-1131007894
Иксик
2005-11-03 11:51
2005.11.27
Харьковчане, скажите код :)


14-1131116793
DeCode
2005-11-04 18:06
2005.11.27
Проблема с установкой ХР


11-1112327970
DmiSb
2005-04-01 07:59
2005.11.27
Не получается в DLL, собранную на VCL, передать PStream.


1-1130924158
ASDSee
2005-11-02 12:35
2005.11.27
увеличить в два раза BMP из загруженного в новосозданный


2-1131579227
clark
2005-11-10 02:33
2005.11.27
kak otkrit zvukovoy fayl ?





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