Jump to content

Dragokas

Members
  • Content Count

    13
  • Joined

  • Last visited

1 Follower

About Dragokas

  • Rank
    Candidate

Recent Profile Visitors

1,743 profile views
  1. Нет, у меня для определения редакции используется GetProductInfo, из которой для получения словесного описания кода я использую вот такую простыню: Как раз только что обновил этот список согласно MSDN. Можете воспользоваться. Думаю, сконвертировать в Дельфи-синтаксис не сильно будет сложно.
  2. Спасибо, Олег! Интересная информация. Почитал здесь, что ServiceDLL также может быть подменена через ServiceManifest. А у вас такой метод учитывается? + ServiceDll может располагаться как внутри раздела ...\Services\<Name>, так и внутри ...\Services\<Name>\Parameters. Правда, у которого из них приоритет, я не знаю.
  3. Здравствуйте, Олег! Сейчас AVZ определяет версию ОС чтением из реестра. Но порой попадаются темы, когда пользователи подменяют системные файлы, и в итоге превращают клиентскую систему в сервер. Пример темы. Кроме того, данные в реестре легко могут быть подменены. Предлагаю определять реальную версию, то на чём непосредственно работает система в данный момент. Также бывают редкие случаи когда программы даже имея манифест совместимости зовут широко используемую для этих целей GetVersionEx, но она выдаёт MajorMinor 6.2, т.е. Windows 8, вместо Windows 8.1 / 10. Пример темы. Поэтому предлагаю для этих целей использовать RtlGetVersion, экспортируемую ntdll.dll. Преимущество можно сразу же оценить по скрину из ссылки выше. В качестве заполняемой структуры она использует RTL_OSVERSIONINFOEXW, которая идентична полям OSVERSIONINFOEXW. Отсюда же можно получить информацию, является ли ОС серверной (IsServer = (osi.wProductType != VER_NT_WORKSTATION)).
  4. Кстати, для заданий .job полное их удаление заключается не только в удалении файла задания, но и зачистке: HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\CompatibilityAdapter\Signatures, <Job name> HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\CompatibilityAdapter\Signatures, <Job name>.fp
  5. В XP/2003 WinAPI-функции часто дописывают разные префиксы вроде !\??\ \??\ \\?\ \\.\ \SystemRoot\ Может, проблема в нормализации.
  6. Спасибо за подробный ответ. Многое стало ясно. Лично я считаю, что лучше вариант 3 с настройкой. При том условии, что нажатие на "Stop" будет просто вызывать Exception, но не будет блокировать какие-либо операции, т.е. не будет устанавливать тот флаг аварийного завершения, который проверяется в большинстве функций. Буду благодарен, если напишите в этой теме, как назовете эту настройку, когда реализуете. И еще остается вопрос: почему Exception вообще не срабатывает на x64 ОС в скрипте Автологгера, а только прерывает операции.
  7. Спасибо. В этом случае пишет: Class=EAbort, message=Operation aborted. Но это можно получить только через ShowMessage, а ведь дальше по коду Автологгера все это есть, и здесь всплывают команды: AddLineToTxtFile и Addtolog, которые также игнорируются и текст ошибки не попадает в лог.
  8. 1) Если запустить Автологгер на x32-битной системе, а затем нажать кнопку "Прервать работу скрипта", то срабатывает ветка скрипта Except. При этом, если запустить вот такой простенький скрипт: begin try ExecuteStdScr(3); except ShowMessage('Exception!'); end; end. то ветка Except при остановке не срабатывает, что как понимаю является дефолтовым поведением программы. Почему AVZ "падает" при выполнении точно такого же действия со скриптом Автологгера? 2) Кроме того, когда выполняется ветка Except, дальше по коду стоит команда: ExecuteFile. AVZ полностью игнорирует ее и не выполняет. 3) В коде Автологгера есть счетчик с командой Sleep(1). Если в x64-битной системе попытаться остановить скрипт в процессе отсчета таймера, то AVZ на это не реагирует (в отличие от x32 ОС - см. п.1.). Кроме того, если остановить скрипт в этой же x64 системе во время работы ExecuteStdScr(3); то прерывается выполнение только этого стандартного скрипта, а скрипт, скормленный AVZ через ком. строку продолжает работу. И остановить его кнопкой уже не получается.
  9. Здесь есть дамп от той же системы, что выше на скринах. В спул-лог ничего интересного не попало. Вот всё содержимое файла:
  10. Напомню об этой просьбе с кодировками. Воспроизводится просто. Достаточно скопировать что-то из этого форума с англ. раскладкой клавиатуры.
  11. Здравствуйте, Олег! Полагаю, Вы давно знакомы с ситуацией, когда при вкл. англ. раскладке русские буквы превращаются в "?" во время вставки из буфера в редактор скриптов или в окно Execute Custom Script в AVZ. Предлагаю Вам автоматически исправлять данный дефект путем чтения текста в юникодном формате, как только в оконную процедуру приходит сообщение WM_PASTE. У меня это выглядит так: Case WM_PASTE If OpenClipboard(0) Then hMem = GetClipboardData(CF_UNICODETEXT) If hMem Then Size = GlobalSize(hMem) If Size Then txt = Space(Size \ 2 - 1) ptr = GlobalLock(hMem) lstrcpyn ByVal StrPtr(txt), ByVal ptr, Size GlobalUnlock hMem End If End If CloseClipboard End If SendMessage hwnd, EM_REPLACESEL, True, ByVal StrPtr(txt) Полагаю не составит особого труда переписать на Delphi. ______________ И еще просьбочка: хотел напомнить на счет возможности реализовать функцию isElevated. Вы мне уже рассказывали, как правильно проверять повышенные привилегии через GetTokenInformation. У себя реализовал. Вам спасибо. С уважением, Алекс.
  12. После сегодняшнего обновления баз AVZ стандартный скрипт № 8 сразу после запуска выдает ошибку:
×
×
  • Create New...

Important Information

We use cookies to make your experience of our websites better. By using and further navigating this website you accept this. Detailed information about the use of cookies on this website is available by clicking on more information.