Причина в другом.Среди несколько будет именно из-за ошибок WMI.
И я здесь вредных советов не давал. У меня было реализовано гораздо проще, т.о. не безопасно,WMIC прекрасно возвращает код ошибки.
Запустить его в отдельном потоке, чтобы не было негативного влияния на AVZ.
Кто мешает сейчас решить эту проблему. Я так понимаю конкуренции уже нет?Когда вы зарелизили версию 0.1.9.8 он у меня успешно отрапортовал о создание точки восстановления, при том что восстановление системы
в начале вашей темы, как помню эта эта проблема уже описывалась. Win XP SP3 engпосмотреть на среду, где была проблема,
не верный подход.pps/ лично у меня нет желания тратить кучу времени на написания процедуры
Я говорил образно. Конечно, придется писать свой. У меня такой был только один. Он отвечает за запуск RSIT и написан на VBS (JS в первой версии).WatchDog
а именно, наличие строки ReturnValue = 0;Код:WMIC /Namespace:\\root\default Path SystemRestore Call CreateRestorePoint "SafeZone.cc", 100, 10 Идет выполнение (SystemRestore)->CreateRestorePoint() Метод успешно вызван. Параметры вывода: instance of __PARAMETERS { ReturnValue = 0; };
То Вы же все равно подставляете cmd /c в скрипты AVZ. AVZ не умеет. Но умеет CMD, сразу возвращая курсор управления кодом к скрипту AVZ:отдельным потоком не получится.
// Вычисляем кол-во процессов
Function GetProcessCountByName(name : string) : integer;
var
i : integer;
count : integer;
begin
// Обновить список процессов
RefreshProcessList;
count := 0;
// Цикл по списку процессов
for i := 0 to GetProcessCount - 1 do begin
if LowerCase(GetProcessName(i)) = name then count := count + 1;
end;
Result := count;
end;
// Прошло ли указанное кол-во секунд (допустимо указывать не > 60)
Function IsElapsedSeconds(LastDate : TDateTime; CurrentDate : TDateTime; SecMax : integer) : Boolean;
var
LastSec, CurSec, Diff : integer;
begin
LastSec := StrToInt(FormatDateTime('ss', LastDate));
CurSec := StrToInt(FormatDateTime('ss', CurrentDate));
Diff := CurSec - LastSec;
if (Diff < 0) then Diff := Diff + 60;
Result := (Diff > SecMax);
end;
// Создать System Recovery Point. Возвращает true в случае успеха.
Function CreateSR : Boolean;
var
W_log, SR_Command : String;
//SL : TStringList;
WmicCount : integer;
LastDate : TDateTime;
begin
// Папка с логом SR
W_log := GetAVZDirectory + '\WMIC.log';
if FileExists(W_log) then DeleteFile(W_log);
// Команда создания SR средствами WMIC
SR_Command := 'WMIC /Namespace:\\root\default Path SystemRestore Call CreateRestorePoint "SafeZone.cc", 100, 10';
// Считаем кол-во процессов WMIC перед его запуском
WmicCount := GetProcessCountByName('wmic.exe');
// Запуск SR через CMD без ожидания завершения операции с логированием вывода в файл W_log, в свернутом окне
ExecuteFile('cmd.exe', '/c start /min "" cmd /c "' + SR_Command + ' > ' + '"' + W_log + '""', 2, 0, false);
// Выжидаем среднее приемлемое время
Sleep(3);
LastDate := now;
// Цикл - своеобразный WatchDog: завершится, если или пройдет граничное время (еще 10 сек.), или кол-во процессов WMIC уменьшится на 1
while (GetProcessCountByName('wmic.exe') > WmicCount) and (not IsElapsedSeconds(LastDate, now, 12)) do begin
Sleep(1);
end;
Sleep(2);
if FileExists(W_log) then begin
// Загрузка из текстового файла (закомментировал - вызывает падение AVZ)
//SL.LoadFromFile(W_log);
//Result := (SL.IndexOf(#9+'ReturnValue = 0;') <> -1);
LoadFileToBuffer(W_log);
// Проверка наличия сигнатуры "ReturnValue = 0;"
Result := (SearchSign('52 65 74 75 72 6E 56 61 6C 75 65 20 3D 20 30 3B',0,0) >= 0);
// Чистим буфер
FreeBuffer;
DeleteFile(W_log);
end
else begin
// Если команда "замерзла", завершаем WMIC принудительно
TerminateProcessByName('wmic.exe');
Result := false;
end;
end;
var
msg : string;
begin
if CreateSR then
msg := 'Контрольная точка успешно создана.'
else
msg := 'Не удалось создать контрольную точку восстановления системы !!!';
MessageDLG(msg, mtInformation, mbOk, 0);
end.
Если не трудно.Как я завалил WMIC: тут нельзя -> напишу в закрытом разделе.
Качаем ситлог - http://tools.safezone.cc/glax24/SIT/SITLog.zipНапример SITLog 0.7.7 хотя сейчас актуальная 0.7.25
Саня ты читаешь сообщение (специально же ссылку дал), вот именно версиия 0.7.25 , если ты перейдешь по ссылке и посмотришь вчерашние логи то в них версия SITLog 0.7.7. Отсюда вопрос что в Автологере нет проверок актуальности программ?Что-то не так?
А если юзер скачал автологер месяц назад и делает им логи, может тогда хотя бы в инструкции упомянуть что необходимо заново скачать автологер.В автологере нет необходимости делать проверку актуальности версии. На момент скачивания у юзера всегда актуальная версия.
Вот и пришло время осечекПо крайней мере наша сборка пока осечек не давала.
это ошибка RSIT, автологер просто его запускает и никак не влияет на его работу.А с RSIT что? или автологер здесь не причем?
имхо, лишнее. Имхо, критична версия и обновления баз AVZ - их проверка встроена в автологер, а версия SITLog думаю не так критична, если там будет (или не будет) что-то важное по мнению консультанта, то он может попросить скачать свежую версию AutoLogger.А если юзер скачал автологер месяц назад и делает им логи, может тогда хотя бы в инструкции упомянуть что необходимо заново скачать автологер.
Мне не понятно почему он при запуске без автологера не выдал ошибку, а в автологере выдал ошибку.это ошибка RSIT, автологер просто его запускает и никак не влияет на его работу.
+ своё, имхо, по поводу добавления этой утилиты я писал в теме.Не смотря на то, что логи собираются автоматом нет смысла постоянно собирать двадцать логов, если они не нужны.Половина сборщика порубило.
Устроим голосование?Хотя чего ждать:своё, имхо
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?