AutoLogger [regist & Drongo]

AutoLogger [regist & Drongo] 2015.11.18

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,536
Реакции
5,990
Баллы
798
Среди несколько будет именно из-за ошибок WMI.
Причина в другом.
Программирование на CMD - это как работа с бомбой, никогда не знаешь когда взорвется, а когда взорвется уже не поймешь почему.
Это я к тому, что там нет в помине никаких try...catch. Любая ошибка, среда "падает". Нужна предельная внимательность.

Так вот. Я писал:
WMIC прекрасно возвращает код ошибки.
Запустить его в отдельном потоке, чтобы не было негативного влияния на AVZ.
И я здесь вредных советов не давал. У меня было реализовано гораздо проще, т.о. не безопасно,
что и потвердили наши с glax24-ом последние тесты, где WMI нафиг валила среду AutoIT (но опять таки у него не отдельным потоком реализация).
Но Drongo, ты же вроде матерый программист, должен понимать, что запустив в другом потоке (процессе), это не приведет к падению AVZ.
В основном коде ставится таймер Deadlin-а (WatchDog по-Вашему) + условие. Продолжить код, если выполнено одно из условий:
1) или получен код возврата WMIC (через файл... или как душа придумает AVZ умеет)
2) или закончился таймер дедлайна.
Как я завалил WMIC: тут нельзя -> напишу в закрытом разделе.

Когда вы зарелизили версию 0.1.9.8 он у меня успешно отрапортовал о создание точки восстановления, при том что восстановление системы
Кто мешает сейчас решить эту проблему. Я так понимаю конкуренции уже нет?
Я готов помочь и из интереса посмотреть на среду, где была проблема, и дать пару команд для проверки твоего утверждения.
 
Последнее редактирование:

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,536
Реакции
5,990
Баллы
798
Если в начале темы, ту ошибку давно исправил (но это было еще в ver.0.1.9.0)
Проблема была, что код ошибки оказался со знаком - (минус), чего я не ожидал.
 

regist

гоняюсь за туманом
Ассоциация VN/VIP
VIP
Разработчик
Сообщения
12,958
Реакции
6,170
Баллы
1,008
p/s
1) средствами AVZ работа с WMI отдельным потоком не получится.
2) WatchDog будет работать до конца пока не истечёт его таймер ни на какое условие не отреагирует.
pps/ лично у меня нет желания тратить кучу времени на написания процедуры, только для того чтобы доказать что она будет косячить.
 

Drongo

Ассоциация VN/VIP
Разработчик
Сообщения
7,831
Реакции
5,561
Баллы
808
glax24, 1 и 3 случай, х64, тут всё верно. 2 случай, да, виновник шифт. Это видно по процессам.
 

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,536
Реакции
5,990
Баллы
798
Я говорил образно. Конечно, придется писать свой. У меня такой был только один. Он отвечает за запуск RSIT и написан на VBS (JS в первой версии).

Вообщем провел несколько креш-тестов по WMIC.
Получил и славный код успеха при поврежденном WMIC.
Т.о. наиболее надежно можно получить результат успеха, анализируя сам вывод команды WMIC:
Код:
WMIC /Namespace:\\root\default Path SystemRestore Call CreateRestorePoint "SafeZone.cc", 100, 10
Идет выполнение (SystemRestore)->CreateRestorePoint()
Метод успешно вызван.
Параметры вывода:
instance of __PARAMETERS
{
  ReturnValue = 0;
};
а именно, наличие строки ReturnValue = 0;

На счет "Включить создание контрольных точек" спомощью WMIC - не рекомендую такое делать на XP.
В остальных случаях никаких зависаний в теме о лечении я не наблюдал.

отдельным потоком не получится.
То Вы же все равно подставляете cmd /c в скрипты AVZ. AVZ не умеет. Но умеет CMD, сразу возвращая курсор управления кодом к скрипту AVZ:

ExecuteFile('cmd.exe', '/c start "" WMIC /Namespace:\\root\default Path SystemRestore Call CreateRestorePoint "SafeZone.cc", 100, 10', 0, 0, false);

UPD... открыл справку по ExecuteFile и прикололся. Там и пауза, и Terminate уже все реализовано,
позже сделаю, чтоб WMIC вообще "замерзла", посмотрим, как справится эта функция.

А пока реализация в отдельном процессе вне 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.

Но кому я это рассказіваю. Все равно никто не слушает.
... У Вас тут кто-то учит писать простые скрипты, а то у меня не получается? :D
 
Последнее редактирование:

glax24

Разработчик
Сообщения
2,001
Реакции
1,485
Баллы
638
Как я понял в автологере нет проверок актуальности программ входящих в его состав, http://forum.oszone.net/thread-274039.html
Например SITLog 0.7.7 хотя сейчас актуальная 0.7.25
+ Почему то RSIT запущенный отдельно отработал, а в сборке дал ошибку.
 
Последнее редактирование:

Drongo

Ассоциация VN/VIP
Разработчик
Сообщения
7,831
Реакции
5,561
Баллы
808
Как я завалил WMIC: тут нельзя -> напишу в закрытом разделе.
Если не трудно.
Например SITLog 0.7.7 хотя сейчас актуальная 0.7.25
Качаем ситлог - http://tools.safezone.cc/glax24/SIT/SITLog.zip
Получаем версию - http://tnkscr.net/fUcjXZ.jpg
Что-то не так?
 

glax24

Разработчик
Сообщения
2,001
Реакции
1,485
Баллы
638
Саня ты читаешь сообщение (специально же ссылку дал), вот именно версиия 0.7.25 , если ты перейдешь по ссылке и посмотришь вчерашние логи то в них версия SITLog 0.7.7. Отсюда вопрос что в Автологере нет проверок актуальности программ?
 
Последнее редактирование:

Drongo

Ассоциация VN/VIP
Разработчик
Сообщения
7,831
Реакции
5,561
Баллы
808
В автологере нет необходимости делать проверку актуальности версии. На момент скачивания у юзера всегда актуальная версия.
Мы решили отказаться от проверки непосредственно во время выполнения логов, т.к. возможно у юзера будет загруженый инет, возможно его не будет вообще. Но в архиве автологгера и на сервере всегда версия актуальна, т.к. обновление происходит раз в сутки.
 

glax24

Разработчик
Сообщения
2,001
Реакции
1,485
Баллы
638
Не запустился Autologger
В автологере нет необходимости делать проверку актуальности версии. На момент скачивания у юзера всегда актуальная версия.
А если юзер скачал автологер месяц назад и делает им логи, может тогда хотя бы в инструкции упомянуть что необходимо заново скачать автологер.
А с RSIT что? или автологер здесь не причем?
По крайней мере наша сборка пока осечек не давала.
Вот и пришло время осечек ;)
 
Последнее редактирование:

regist

гоняюсь за туманом
Ассоциация VN/VIP
VIP
Разработчик
Сообщения
12,958
Реакции
6,170
Баллы
1,008
А с RSIT что? или автологер здесь не причем?
это ошибка RSIT, автологер просто его запускает и никак не влияет на его работу.
А если юзер скачал автологер месяц назад и делает им логи, может тогда хотя бы в инструкции упомянуть что необходимо заново скачать автологер.
имхо, лишнее. Имхо, критична версия и обновления баз AVZ - их проверка встроена в автологер, а версия SITLog думаю не так критична, если там будет (или не будет) что-то важное по мнению консультанта, то он может попросить скачать свежую версию AutoLogger.
 
Последнее редактирование:

glax24

Разработчик
Сообщения
2,001
Реакции
1,485
Баллы
638
это ошибка RSIT, автологер просто его запускает и никак не влияет на его работу.
Мне не понятно почему он при запуске без автологера не выдал ошибку, а в автологере выдал ошибку.
 

regist

гоняюсь за туманом
Ассоциация VN/VIP
VIP
Разработчик
Сообщения
12,958
Реакции
6,170
Баллы
1,008
glax24, это к разработчикам RSIT.почистил тему от мусора.
 
Последнее редактирование:

akok

Команда форума
Администратор
Сообщения
19,824
Реакции
13,585
Баллы
2,203
Добавьте в сборку SecurityCheck, в альтернативной версии было удобно смотреть уязвимый софт без лишних запросов.
 

regist

гоняюсь за туманом
Ассоциация VN/VIP
VIP
Разработчик
Сообщения
12,958
Реакции
6,170
Баллы
1,008
и встраивать отключение антивируса? ;)
не так уже сложно запросить один раз этот лог в конце, чем по ходу лечения каждый раз пользователю вырубать скриптами защиту антивируса и из-за этого иметь дополнительные детекты.
http://safezone.cc/threads/virulogs-collector-by-dragokas.22634/page-7#post-167138
Половина сборщика порубило.
+ своё, имхо, по поводу добавления этой утилиты я писал в теме.Не смотря на то, что логи собираются автоматом нет смысла постоянно собирать двадцать логов, если они не нужны.
 
Сверху Снизу