Это отрывки из бесплатной главы из бумажной книги «The Old New Thing». Они ничему не пытаются научить; это просто короткие забавные эпизоды из будней борцов за совместимость новых версий Windows со старыми приложениями.
Изменяем номер версии Windows
Изменить номер версии, который Windows сообщает программам, не просто, как кажется. Например, некоторые программы проверяют номер версии так:
UINT Ver = GetVersion(); UINT MajorVersion = LOBYTE(uVer); UINT MinorVersion = HIBYTE(uVer); if (MajorVersion
Представьте себе, как этот код отработает на Windows 95, у которой номер версии 4.0. Вторая проверка срабатывает из-за того, что 0 меньше 10.
И ладно бы программа просто выводила сообщение об ошибке и завершалась. Многие рушились: очевидно было, что их поведение на «неподдерживаемых» версиях Windows никогда не тестировалось.
Таких программ оказалось настолько много, что мы перестали исправлять их по одной, и просто изменили возвращаемый номер версии с 4.0 на 3.95.
НЕСОВМЕСТИМЫЕ. 1-2 сезон. Детектив. Великобритания.
Программы для MS-DOS тоже не все гладко реагировали на изменение версии ОС. Это удивительно потому, что к тому времени у MS-DOS уже были десятки выпущенных версий и под-версий, и разработчикам пора было бы уже научиться проверять номер версии. Но например, один пакет программ использовал номер версии DOS как индекс в таблице функций: по собственной функции для каждой вышедшей версии. В таблице было пять функций: от MS-DOS 1.x до 5.x. Когда программа запускалась под MS-DOS 6.0, она вызывала адрес за пределами таблицы, и рушилась.
Изменить номер версии, который Windows сообщает программам, — необходимый, но очень тяжёлый шаг. Пара нажатых клавиш, и падают сотни приложений, отлично работавших до сих пор; теперь отделу совместимости придётся потратить на вылавливание чужих багов лишнюю тысячу человеко-часов.
Сообщаем разработчикам о баге в их программе
Конкретно этот разговор вымышлен, но похожие по сути разговоры случались не единожды.
—Алло?
—Здравствуйте, это такой-то, из отдела совместимости Microsoft Windows. Мы нашли в вашей программе баг, из-за которого она не работала. Мы были вынуждены добавить в Windows 95 код для обхода этого бага, чтобы ваша программа продолжала работать.
—Замечательно, большое вам спасибо! До свидания. (Короткие гудки.)
(Набираем номер снова.)
—Алло?
—Алло, ээ… Вы даже не хотите узнать, какой был баг?
—Какая разница? Вы же всё исправили. Спасибо! Что бы мы без вас делали!
—Но, ээ, код в обход бага будет работать только с текущей версией вашей программы. Когда вы выпустите следующую версию, она не заработает.
—Вот оно как. Ну, подождите, я свяжу вас с нашими программистами.
Разработчики совершенно не обращают на вас внимания, пока вы не упомянете, что их программа перестанет работать.
Когда я занимался обратной совместимостью с программами для MS-DOS (в основном это были игры), часто бывало, что я звонил сообщить разработчикам, что их программа не работает под Windows 95. Многие разработчики отвечали просто «Так и есть, мы не работаем с Windows.»
SIMS 4 | КАК НАЙТИ СЛОМАННЫЙ МОД | BETTER EXCEPTIONS
Напоминаем пользователям действовать строго по инструкции
Сосед одного из наших разработчиков купил программу, которая рушилась сразу же при запуске. Разработчик и его коллеги начали со стандартной процедуры — меняли драйвера, запускали на другом компьютере — но ничего не помогало. Отчаявшись справиться с проблемой своими силами, они позвонили разработчикам.
В техподдержке им объяснили: если во время установки не заполнить все три поля — имя, организацию и серийный номер — то установка проходит успешно, но программа будет рушиться при запуске. И это не изощрённая защита от копирования, а задокументированный баг.
Ставим телегу впереди лошади
Иногда в программах обнаруживаются такие жуткие баги, что непонятно, как они вообще работают.
Установщик одной популярной программы пытается заменить системный файл собственной версией. Он заменяет файл, даже если эта собственная версия старее, чем уже установленная в системе: установщик не заморачивается проверкой версий.
Отлично, система защиты файлов Windows внимательно следит за такими программами, и она восстановит правильную версию, как только установка завершится. Проблема не в этом.
Если системный файл, который установщик пытается заменить, занят, то установщик перезаписывает его с опцией MOVEFILE_DELAY_UNTIL_REBOOT — чтобы занятый файл заменился при перезагрузке системы:
// Код упрощен для ясности MoveFileEx(«sysfile.new», «sysfile.dll», MOVEFILE_DELAY_UNTIL_REBOOT); CopyFile(«D:\CDROM\INSTALL\sysfile.dll», «sysfile.new»);
Так и есть — программа пытается копировать файл, которого ещё не существует!
Этот код действительно работал на Windows NT, потому что там функция MoveFileEx , когда её вызывали с MOVEFILE_DELAY_UNTIL_REBOOT , не проверяла, существует ли копируемый файл. В бета-версии Windows 2000 мы добавили более строгую проверку параметров; теперь MoveFileEx возвращала ошибку. Установщик считал эту ошибку фатальной, и прекращал установку.
Пришлось в Windows 2000 разрешить копирование несуществующих файлов с опцией MOVEFILE_DELAY_UNTIL_REBOOT . MoveFileEx рапортует об успешном выполнении — в надежде, что ко времени перезагрузки копируемый файл действительно появится.
Самый странный способ проверки успешности вызова
Понятия не имею, о чём думали разработчики одной мультимедиа-программы, которая, проверяя успех вызова мультимедиа-функций, не сравнивала возвращаемый MMRESULT с MMSYSERR_NOERROR , а получала для номера ошибки текстовое описание, и затем сравнивала эту строку с «The specified command complete successfully.»
На самом деле, она сравнивала только первые шестнадцать символов с «The specified co» — наверное, кто-то просматривал код и решил оптимизировать это место.
В одной из версий Windows, когда мы немного перефразировали это сообщение, программа перестала работать. Нет нужды говорить, что на не-английских версиях Windows она никогда не работала.
Более странный, чем самый странный, способ проверки успешности вызова
Что бы вы думали? Есть ещё более странный способ. Как минимум, прошлая программа работала с возвращаемым кодом ошибки. Другая программа, которая пользовалась MCI для проигрывания видеороликов, полностью игнорировала значение, возвращаемое вызовом MCIWndOpen . Вместо этого она читала заголовок MCI-окна, и сравнивала его со строкой «No Device», чтобы определить, удалось ли открытие файла.
В Windows 95 заголовок MCI-окна при открытии файла устанавливался с небольшой задержкой. Теперь та программа не могла открыть видеоролики: она проверяла заголовок окна слишком рано.
Как допустить ошибку в функции из одной строчки
Однажды ко мне в офис зашёл сотрудник, и спросил: «Эй, хочешь звуковую карту?» Своей звуковой карты у меня не было, так что я согласился.
Оказалось, он отдал мне эту карту не просто так: ему не удавалось заставить её работать под Windows 95. Теперь не он, а я был неудачником со сломанной звуковухой. Вскоре я понял, почему он так хотел от неё избавиться: периодически она рушила всю систему. На моей машине была установлена отладочная версия Windows, так что я смог выяснить причину падений.
Разработчики драйвера для этой звуковой карты взяли функцию из одной строчки, образец которой приведён в DDK, — и им удалось допустить в ней ошибку.
Вот образец функции в DDK:
void FAR PASCAL midiCallback(NPPORTALLOC pPortAlloc, WORD msg, DWORD dwParam1, DWORD dwParm2) < if (pPostAlloc->dwCallback) DriverCallBack(pPortalloc->dwCallback, HIWORD(pPortalloc->dwFlags), pPortalloc->hMidi, msg, dwParam1, dwParam2); >
Она вызывается системой при аппаратном прерывании.
Вот так выглядела эта функция в том драйвере:
void FAR PASCAL midiCallback(NPPORTALLOC pPortAlloc, WORD msg, DWORD dwParam1, DWORD dwParm2) < char szBuf[80]; if (pPostAlloc->dwCallback) < wsprintf(szBuf, » Dc(hMidi=%X,wMsg=%X)», pPortalloc->hMidi, msg); #ifdef DEBUG OutputDebugString(szBuf); #endif DriverCallBack(pPortalloc->dwCallback, HIWORD(pPortalloc->dwFlags), pPortalloc->hMidi, msg, dwParam1, dwParam2); > >
Они не только оставили в окончательной версии драйвера остатки отладочного кода; во время аппаратного прерывания они вызывают функцию, которую в этот момент вызывать нельзя. Если wsprintf выгружена из памяти, то система во время аппаратного прерывания получает новое прерывание «отсутствующий сегмент», — и всё, конец. Даже если повезло, и wsprintf находится в памяти — эта функция изменяет верхнее слово 32-битных регистров, а обработчик аппаратных прерываний сохраняет только нижнее слово. Это означает, что прерванный код ждёт весьма грубое пробуждение, когда обработка прерывания завершится.
Несмотря на всё это, звуковая карта получила награду одного популярного компьютерного журнала.
Но этим несправедливость не ограничилась: производитель карты хотел, чтобы в Windows 95 вошла новая версия их драйвера. И что же мы увидели в новой версии? Тот самый баг, рушащий систему — тот самый, который мы показали их программистам несколько месяцев назад. Как можно догадаться, новая версия драйвера в Windows 95 не вошла.
Редактор звуков и назойливый паразит
Нам попалась одна обучающая программа, паразитирующая на стандартном Редакторе звуков, и вцепившаяся в него так глубоко, что чем дальше мы её изучали, тем больше поражались.
Первая проблема была банальной: программа запускала Редактор звуков по имени его 16-битной версии, SOUNDREC.EXE . В Windows 95 Редактор звуков был 32-битным, и назывался SNDREC32.EXE — так же, как в Windows NT. Мы переименовали файл обратно в 16-битное имя, и полагали, что теперь программа заработает.
Но она не заработала. Успешно запустив редактор, программа ищет его окно по заголовку. Сначала она пробует найти английский заголовок, потом итальянский (программа разрабатывалась для итальянцев). Не так уж и плохо: многие разработчики вовсе не задумывались о поддержке локализованных выпусков Windows. Правда, итальянцы, живущие, скажем, во Франции, воспользоваться этой программой не смогут; но это не наша забота.
В Windows 95 заголовок Редактора звуков поменялся: мы добавили туда имя открытого файла. Теперь программа не могла найти окно редактора, который запустила.
Тогда мы поменяли заголовок 16-битного Редактора звуков, чтобы он в точности совпадал с заголовком, бывшим в Windows 3.1. Наконец-то программа запустилась. Мы проследили за ней, и обнаружили, что она никогда не пользуется запущенным редактором! Зачем же она его запускала?
Оказалось, в определённых условиях она им действительно пользуется. Обычно она проигрывает звуки при помощи специального компонента (видимо, это был VBX), который поддерживает асинхронные драйвера звуковых карт, но не поддерживает синхронный драйвер SPEAKER.DRV , позволявший на компьютерах без звуковой карты проигрывать звуки через спикер.
Разработчики искали что-нибудь, что сможет работать с этим синхронным драйвером, — и нашли Редактор звуков. Сымитировать нажатия клавиш в его окне — и готова дешёвая замена компоненту-проигрывателю.
Но если обратить внимание в момент запуска программы, можно заметить, как окно Редактора звуков мелькает и сразу же пропадает, оставив лишь полосочку слева экрана. Программисты не хотели, чтоб окно редактора было видно. Но они не знали, как сделать окно невидимым, поэтому они сделали всё, что было в их силах: «утащили» окно за пределы экрана. Ну, почти за пределы. Они не умели даже переместить окно программно, поэтому они имитировали клики и движения мыши, как будто перетаскивают окно за заголовок. Когда на экране остаётся только узкая полоска, которую мышью уже не утащить дальше влево, программисты считают свою задачу выполненной: «Мы убрали окно за экран — наверное, никто его не заметит.»
Советую глянуть заодно мой прошлый перевод — Любимый «железный» баг
- the old new thing
- windows
- история windows
- совместимость версий
Источник: habr.com
Исправить Эта версия этого файла не совместима с версией Windows, которую вы используете
Windows — одна из самых популярных операционных систем с более чем миллиардом пользователей. Весь этот успех обусловлен множеством функций, которые были интегрированы в операционную систему на протяжении многих лет. Последней и лучшей версией Windows является операционная система Windows 10, до которой Microsoft настоятельно рекомендует своим пользователям выполнить обновление.
Однако обновление сопровождается некоторыми проблемами, большинство пользователей неохотно обновляют, потому что были сообщения об ошибках «Эта версия этого файла несовместима с версией Windows, которую вы используете» с некоторыми приложениями и установщиками после обновления из старая версия Windows. В этой статье мы обсудим причину этой ошибки и предложим вам практическое решение для ее полного устранения.
Сообщение об ошибке:
Версия этого файла несовместима с используемой вами версией Windows. Проверьте системную информацию вашего компьютера, чтобы узнать, нужна ли вам версия программы x86 (32-разрядная) или x64 (64-разрядная), а затем обратитесь к издателю программного обеспечения.
Как исправить эту ошибку:
Убедитесь, что вы используете 32-битную или 64-битную версию Windows.
Чтобы выяснить, работает ли ваш компьютер в 32-битной или 64-битной Windows, выполните следующие действия:
- Откройте систему, нажав кнопку «Начать изображение», нажав «Панель управления», затем «Система».
- В разделе Система вы можете увидеть тип системы. Здесь описывается, есть ли у вас биты 32 или биты 64.
Обновление за май 2023 года:
Теперь вы можете предотвратить проблемы с ПК с помощью этого инструмента, например, защитить вас от потери файлов и вредоносных программ. Кроме того, это отличный способ оптимизировать ваш компьютер для достижения максимальной производительности. Программа с легкостью исправляет типичные ошибки, которые могут возникнуть в системах Windows — нет необходимости часами искать и устранять неполадки, если у вас под рукой есть идеальное решение:
- Шаг 1: Скачать PC Repair https://windowsbulletin.com/ru/%D0%B8%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D1%82%D1%8C-%D1%8D%D1%82%D1%83-%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D1%8E-%D1%8D%D1%82%D0%BE%D0%B3%D0%BE-%D1%84%D0%B0%D0%B9%D0%BB%D0%B0-%D0%BD%D0%B5%D1%81%D0%BE%D0%B2%D0%BC%D0%B5%D1%81%D1%82%D0%B8%D0%BC%D0%BE-%D1%81-%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D0%B5%D0%B9-Windows,-%D0%BA%D0%BE%D1%82%D0%BE%D1%80%D1%83%D1%8E-%D0%B2%D1%8B-%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D1%83%D0%B5%D1%82%D0%B5/» target=»_blank»]windowsbulletin.com[/mask_link]
Как скачать несовместимые приложения на Android в 2021 году
Допустим, сегодня каждый пользователь Android продолжает пробовать разные приложения на телефонах. При загрузке различных приложений мы иногда сталкиваемся с приложением, несовместимым с вашим устройством. Проблемы несовместимости возникают по разным причинам, например из-за неподдерживаемых процессоров, приложений с географическим ограничением и т. Д.
Шаги по загрузке несовместимых приложений на Android в 2021 году
В большинстве случаев приложения несовместимы с вашей версией Android или из-за ограничений для конкретной страны, что означает, что приложение, которое вы пытаетесь загрузить, недоступно или не предназначено для вашей страны. Вы можете вставить сюда URL-адрес Google Play, и это даст вам возможность загрузить файл APK на свой компьютер. Позже вы можете перенести его на свое Android-устройство и пользоваться несовместимыми приложениями.
1-й метод: прямая загрузка несовместимых приложений Apk
Вы можете попробовать скачать файл Apk с разных сайтов. В этом методе вам необходимо загрузить файл Apk с другого веб-сайта. Ниже мы поделились некоторыми из лучших сайтов для загрузки файлов Android Apk.
1. Apkleecher
Это отличный сайт, с которого вы можете напрямую загрузить файл .apk любого приложения из магазина Google Play. В этом приложении вы должны ввести пакет имени приложения в текстовое поле, и этот сайт предоставит вам прямую ссылку для загрузки .apk этого приложения.
2. Загрузчик Evozi Apk
Используя этот сайт, вы можете загружать все свои любимые приложения прямо на свое устройство в виде файла .apk. Благодаря этому вы даже можете загружать большие файлы игры. Просто вставьте ссылку на приложение в Play Store и загрузите его прямо на свой компьютер.
3. АПК-ДЛ
Самый последний загруженный apk набирает популярность, потому что. На этом сайте есть функции, которые делают загрузку файлов apk интересной. Вы можете загружать приложения из магазина Google Play, просто отредактировав URL-адрес; вам нужно изменить play.google.com на APK-DL.com, тогда файл появится для загрузки.
4. Apkpure
APKPure – лучшая онлайн-загрузка, позволяющая загружать приложение из надежного источника приложений Google Play. Они также предлагают самые полные коллекции Android-игр, приложений и всех других необходимых apk-файлов. Было бы лучше, если бы вы вставили URL-адрес приложения Google Play, и вы могли бы загрузить файл apk прямо на свой компьютер.
5. ApkMirror
ApkMirror – один из самых популярных веб-сервисов, который часто обновляется приложениями для Android. Фактически, когда он поступил в Google Play, он был загружен в ApkMirror. Это веб-сервис, с помощью которого вы можете получить все последние APK-файлы приложений прямо на свой компьютер.
6. AppsAPK
По сути, это торговая площадка, где вы найдете apk-файлы практически всех приложений в Интернете. Интерфейс веб-сайта отличный и простой, что упрощает просмотр любого приложения. С AppsAPK вы можете загружать игры, приложения, обои, темы, наборы значков и многое другое.
2-й метод: загрузка приложений для конкретной страны с помощью VPN
Если вы не можете загрузить приложение из-за ограничений, действующих в конкретной стране, вам необходимо использовать службу VPN. Ниже мы поделились некоторыми из лучших приложений VPN для Android, которые вы можете использовать бесплатно.
1. Безлимитный бесплатный VPN – betternet
Используя это, вы можете загрузить приложения для конкретной страны, которые вам недоступны. Betternet предлагает потрясающий сервис. Betternet VPN предоставляется бесплатно. Вам не нужно регистрироваться для использования этого VPN. Когда вы используете этот VPN, вы не видите никаких объявлений, журналов и ограничений. Они защищают вашу конфиденциальность и личность.
С помощью Unlimited Free VPN вы можете разблокировать веб-сайты при подключении к Интернет-провайдеру и Wi-Fi.
2. Hotspot Shield VPN и прокси
Это самое популярное и наиболее загружаемое приложение VPN для Android в Google Play. Hotspot Shield поддерживает соединения 3G / 4G. Hotspot Shield обеспечивает потрясающую защиту при просмотре веб-сайтов и известных веб-сайтов социальных сетей. С помощью этого VPN вы можете защитить свой Интернет от хакеров, установить правила брандмауэра и скрыть свой IP-адрес. По сути, это бесплатный VPN, но за Elite вы платите некоторую комиссию.
3. Hola Free VPN
Вы можете легко разблокировать веб-сайты с помощью этого приложения. Это очень популярное приложение VPN для Android, которое вы можете установить сегодня, чтобы ваши действия были безопасными, защищенными и конфиденциальными. Интерфейс прост, и вы можете легко переключать страну.
4. Бесплатная VPN для Opera
Что ж, браузер Opera с VPN блокирует рекламные трекеры и позволяет вам изменять свое виртуальное местоположение. Разблокируйте больше контента и получайте доступ к любимым веб-сайтам и приложениям из любого места – совершенно бесплатно. Opera VPN – один из лучших и самых быстрых способов получить бесплатный доступ к большему количеству вашего любимого онлайн-контента.
5. ExpressVPN
Это молниеносный VPN-прокси-сервис без регистрации. С помощью всего нескольких нажатий вы можете безопасно и анонимно выходить в Интернет. ExpressVPN предоставляет более 145 точек подключения в 94 странах. Нет никаких ограничений на переключение серверов.
3-й метод: загрузка несовместимых приложений с помощью альтернатив Google Play
Как Google Play Store, вы можете использовать сторонние магазины приложений для загрузки приложений Android. Преимущество использования стороннего магазина приложений заключается в том, что вы будете загружать несовместимые приложения и игры.
1. Amazon Магазин приложений
У гигантской торговой сети также есть свой магазин приложений, где вы можете найти огромную коллекцию бесплатных приложений, которые вы можете не получить в магазине Google Play, поэтому он также известен как лучшая альтернатива Google Play Store. Обязательно попробуйте это приложение на своем устройстве.
2. F-Droid
Что ж, F-Droid – это устанавливаемый каталог приложений FOSS (бесплатное программное обеспечение с открытым исходным кодом) для платформы Android. Клиент упрощает просмотр, установку и отслеживание обновлений на вашем устройстве.
3. Blackmart Alpha
Blackmart Alpha – рыночная альтернатива Google Play Store для планшетов и smartphones с операционной системой Android; из Blackmart вы можете загружать многие приложения без учетной записи и в Google без регистрации.
4. Аптоиде
Что ж, Aptoide запущен как проект по разработке Marketplace на платформе Android. Aptoide позволяет разработчикам, OEM, телекоммуникационным компаниям и интеграторам создавать собственные магазины Android и управлять ими. Apptoide позволяет пользователям загружать столько приложений, сколько они хотят.
5. GetJar
Что ж, если у вас когда-нибудь будет телефон на Symbian, то GetJar будет вам знаком. Это одно из старейших приложений, которые вы когда-либо могли найти в приложении. Это легкое приложение предоставляет бесплатные популярные приложения для Android.
6. App Brain
Это приложение – лучшая альтернатива Google Play Store. Вы можете получить приложения, несовместимые с вашим устройством. Вы даже можете найти бесплатные приложения премиум-класса в AppBrain. Так же, как Google Play Store, вы можете получить доступ к его веб-сайту, а также к мобильному приложению для доступа к его каталогу.
7. SlideMe
Если вы ищете Google Play Store Альтернатива, SlideMe – лучший выбор для вас. Если вам нравится использовать проект с открытым исходным кодом, вы найдете множество приложений на рынке SlideMe. С SlideMe вы можете найти бесплатные и премиальные приложения в различных категориях.
8. Помощник по пачке.
Это еще одна альтернатива Google Play Store. Замечательная особенность помощника Tutu заключается в том, что он также бесплатно предоставляет пользователям премиум-версию приложений и игр. Интерфейс приложения очень похож на интерфейс Android. Google Play Store, и в нем есть множество приложений и игр. Вы найдете почти все приложения и игры Google Play Store на Туту помощник.
9. GetApk Market
GetApk Market Apk – еще один лучший магазин приложений для Android, который можно установить на свое устройство. Приложение имеет отличный интерфейс, и здесь вы можете найти почти все популярные приложения и игры, доступные на Google Play Store. Отличительной особенностью GetApk Market является то, что он позволяет пользователям напрямую загружать файл Apk любого приложения или игры.
10. Mobogenie
Mobogenie – еще один популярный магазин приложений, доступный на торговой площадке, в котором размещено множество приложений и игр. Интерфейс приложения очень похож на Play Store, и в нем размещены почти все популярные приложения и игры для Android. Пользовательский интерфейс настолько хорош, что пользователи не столкнутся с трудностями при поиске своих любимых приложений.
Источник: tehnografi.com