Форум: "Начинающим";
Текущий архив: 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.013 c