...

Задержка при запуске программ Windows 7

Решение задержки запуска программы DOS при запуске под Win 7×32

Моя программа DOS терпит 8 секундную задержку под Windows 7 — каждый раз.
Запустив идентичную программу тысячи раз под DOS и Win-XP, она запускается мгновенно, буквально за секунду.

Диски почти пусты, загрузка процессора составляет менее 5 процентов, тонны доступной памяти. Изолированный воздушным зазором компьютер, нет сети. Никакой вирус.

CMD.exe запускается мгновенно.
Я понимаю, что он работает под эмулятором (виртуальная машина), но 8 секунд .
Это похоже на необоснованную принудительную задержку (чтобы вывести нас из программ DOS?).

есть идеи, что это вызывает ?

любые идеи о том, как диагностировать это ?

есть идеи, как обойти эту искусственную задержку ?

Ответы:

Это связано с вашей видео картой. Держу пари, вы используете процессор Intel core со встроенным процессором Intel HD Graphics 4400.

задержка не 8 секунд на каждой системе. На некоторых системах он длиннее. У меня есть система, которая всегда имеет 5-секундную задержку.

Не каждая видеокарта поддерживает все видеорежимы. Например, некоторые видеокарты не поддерживают полноэкранный режим DOS. То есть текст имеет ширину 80 столбцов и высоту 25 строк. Только некоторые видеокарты поддержка программ DOS в windows.

по моему опыту, встроенный процессор Intel HD Graphics 4400 всегда вызывает задержку запуска 16-битных программ.

может быть, вы можете купить недорогую видеокарту и положить ее в свой компьютер и прекратить использовать встроенный VGA или DVI на материнской плате.

может быть, Intel может исправить это в драйвере для интегрированного 4400 чип видео.

до тех пор, вы будете испытывать задержку каждый раз вы запускаете 16-битную программу. Даже если вы уже находитесь в «черном» окне командной строки. Можно подумать, что драйвер уже вошел в режим поддержки программы DOS. Но вы испытаете задержку, когда вы введете имя 16-битной программы и нажмете enter.

Другие ответы подобные, не привожу, так как это оказалось правдой.

Далее — решение. После двух дней поиска в интернете был найден патч драйвера. приводится описание (машинный перевод) и инструкция по установке (деинсталляции). Все просто и безопасно. Проверено на картах более высоких версий, чем в описании — РАБОТАЕТ!

Полноэкранный режим NTVDM и проблема запуска с VGA BIOS видеокарт Intel

———-
Краткая версия:
Патч, исправляющий сбой в BIOS некоторых встроенных графических
адаптеров Intel VGA (например, 4010U, 4340 i3 и 4200U i5, 4600 . ), которые вызывают
задержку запуска NTVDM на 5-10 секунд, а также вызывают медленный вывод текста
и другие операции INT10h (1 символ в секунду) в полноэкранном режиме.

Расширенная версия:
недавно я купил новую материнскую
плату с адаптером встроенной графики Intel 4600 . При запуске NTVDM на этой машине я обнаружил
задержку в 5-10 секунд при запуске NTVDM. Но это еще не все, все стало еще хуже при попытке
для переключения в полноэкранный текстовый режим. Вывод символов составлял 1 символ в секунду,
что, очевидно, является неприемлемой скоростью.
Итак, я исследовал Интернет и нашел 2 темы на форумах по продуктам
Microsoft и Intel:

Microsoft не позаботьтесь о том, чтобы вообще ответить на проблему, и на форумах Intel
кто-то из Intel просто ответил, что их платы не тестировались на
совместимость с 16 битами, и поэтому их не волнует проблема (во что я
действительно не могу поверить, как если бы это было правдой, вывод текста в консоли BIOS или Linux
также не будет работать должным образом).
Некоторые люди на форуме Intel сообщили, что теперь им пришлось заказывать кучу
новых видеокарт только из-за этой ошибки!
Полное незнание этой проблемы обеими компаниями очень расстроило меня,
и поэтому настала моя очередь исследовать проблему и исправить ее, как и много раз
до этого.
Сначала мне нужно было выяснить, кого винить в этом беспорядке. Intel или Microsoft?
Интересно, что они оба виноваты определенным образом, но проблема с
NTVDM на удивление даже полезна для решения ошибки Intel Video BIOS.
Звучит немного запутанно? Вы можете прочитать больше в технических деталях ниже.
Ошибка Microsoft состоит в том, что не реализовал IN / OUT на 32-битных портах в NTVDM. Но
даже если бы это было реализовано, BIOS Intel не работал бы должным образом, это
даже вызвало бы больше проблем. Intel, с другой стороны, ожидает, что порты MMIO
будут доступны, что не является причиной в среде V86, такой как NTVDM.
Поэтому он запускается с таймаутом в 1 секунду для каждой операции, даже если
кажется , что он работает нормально без использования этих портов MMIO. Таким образом, их вина заключается в
том, чтобы каждый раз пытаться получить доступ к MMIO в течение 1 секунды, а не просто пропускать его, если он
не работает по неизвестным причинам.
На самом деле проблему можно решить, перескочив через процедуру проверки, которая
составляет всего 1 байт для исправления в Video BIOS.
К счастью, отображение NTVDM адресного пространства BIOS можно исправить в
память через DLL расширения NTVDM, так что вам не нужно перепрограммировать свой VGA
BIOS.

Системные требования
——————-
Должен работать на любом ПК с ОС Windows с затронутой встроенной графической платой Intel и
NTVDM.

Как установить
—————
Перейдите в каталог bin, щелкните правой кнопкой мыши файл intelvidfix.inf и выберите команду установить.

Как удалить
—————-
Откройте командную оболочку от имени администратора (щелкните правой кнопкой мыши командную строку в
меню Пуск / Программы / Стандартные, Запуск от имени администратора).

Перейдите в каталог bin, а затем:

1 RUNDLL32.EXE SETUPAPI.DLL,InstallHinfSection DefaultUninstall 132 intelvidfix.inf

Технические детали
——————
Как я узнал, что здесь происходит?
Очевидно, это была проблема с Video BIOS, поскольку настоящий Video BIOS
запускается только тогда, когда приложение DOS работает в полноэкранном режиме, в
противном случае это просто BOP для эмуляции VGA NTVDM для оконного
режима. Итак, мы знаем, что INT 10h отвечает за выполнение видео ввода-вывода.
Поэтому я проследил простой вызов INT10h для вывода
символа с помощью превосходной утилиты DEBUGX.COM из проекта FreeDOS,
которая, в отличие от классического DEBUG.EXE от Microsoft, также поддерживает 32-битный код, аналогичный используемому в
последнее время в Intel VGA BIOS и во многих новых BIOS.

Итак, прежде всего, что это за порт Дюбуа в F000?
Согласно техническому описанию семейства процессоров Intel Core 2-го поколения для настольных ПК,
Vol. 2 — Раздел: Регистры ввода-вывода устройства 2:

F000 — это регистр адреса MMIO
F004 — регистр данных MMIO

Они специфичны для платы Intel и недоступны для нашей
эмуляции NTVDM и поэтому не доступны, всегда возвращая FF при чтении .
Теперь первое, что приходит в голову, когда мы просто наблюдаем цикл, повторяющийся
1000 раз, — это почему VGA BIOS предполагает наличие этих нестандартных
портов ввода-вывода и вызывает цикл на 1000 итераций при каждой
попытке чтения . Это выглядит не очень умно и является причиной огромной задержки.
Но затем мы можем видеть, что на самом деле выше проверено, есть ли эти порты,
а если нет (так что, если EAX равен FFFFFFFF), они не используются, и код должен
перескакивать. Теоретически это должно быть так, за исключением того, что вход IN в
регистр EAX просто заполняет нижний регистр AX и оставляет старшее слово
регистра нетронутым. Это заставляет нас думать, что это проблема NTVDM,
а не ошибка BIOS.
При копании в NTVDM можно увидеть, что они просто не реализовали
IN / OUT для 32-битных регистров, а только 8 и 16 бит. Я даже сделал патч для
NTVDM для поддержки 32-битного IN / OUT (да, для этого его можно пропатчить
, если вы заинтересованы в патче, просто свяжитесь со мной), но тогда я
понял, что от этого дела обстоят еще хуже. Почему?
Из-за назначения Jump, если проверка FFFFFFFF прошла успешно:

1 C000:28FE 0F848E00 JZ 2990

Это переходит в КОНЕЦ процедуры прерывания, поэтому в этом случае он вообще ничего не
делает!
После тестирования приложения в полноэкранном режиме я смог увидеть, что в
настоящее время оно выполняет свои операции очень медленно, но делает их хорошо. Таким образом,
правильный способ решить эту проблему — не научить NTVDM обрабатывать 32-
битный доступ к портам IN / OUT, а вместо этого просто JMP вне цикла с 1000
итерациями и tadaa — задержка запуска NTVDM исчезла, и полноэкранные
операции работают нормально!
Так что просто меняем:

1 C000:344B 750A JNZ 3457

Почему происходит задержка перед запуском любой программы?

С начала этого года появились очень большие задержки перед запуском любой программы.

Даже «Диспетчер задач» вызываемый через Ctrl+Shift+Esc мучительно долго открывается. Через Process Monitor получается около 5 секунд: winlogon создает процесс taskmgr.exe после пятисекундной паузы после вызова им же функции QueryNameInformationFile для taskmgr.exe.

Никаких программ не устанавливалось, аппаратная часто тоже не менялась.

Система: Windows 7 Ultimate 64 (только редкие ручные обновления с полным контролем)
Диск хороший SSD которому около полугода, тесты на скорость выполняет без проблем, переходы по папкам быстрые и четкие.
Антивирус отключен.

UPD:
Проблема в ESET SS5 — даже если он отключен, все равно пауза есть. Появилась после одного из свежих обновлений этого года. При полном удалении антивируса проблема уходит. После новой установки проблемы тоже нет, пока не скачаются обновления. Полное отключение, отключение проверки папок, отключение проверки при открытии файла или запуске программы не решает проблему 🙁

  • Вопрос задан более трёх лет назад
  • 1574 просмотра

1 комментарий

Простой 1 комментарий

При подготовке материала использовались источники:
https://softclipper.net/clipper-faqvopros-otvet/programma-dos-imeet-5-8-sekundnuyu-zaderzhku-pri-zapuske-pod-win-7.html
https://qna.habr.com/q/699480

Оцените статью