Как заставить упрямые 32-битные приложения работать в 64-битной Windows
Надеюсь, вы уже видели мою статью о 64-битной Windows в последнем выпуске журнала. ПК Про. И, возможно, вас успокоили мои беззаботные заверения о том, что «вам не нужно слишком беспокоиться о совместимости приложений. Почти все современное 32-битное программное обеспечение должно безупречно устанавливаться и работать в 64-битной версии Windows».
Ну, конечно, всякий раз, когда вы пишете что-то подобное, вы напрашиваетесь на неприятности.
Программы для Windows, мобильные приложения, игры - ВСЁ БЕСПЛАТНО, в нашем закрытом телеграмм канале - Подписывайтесь:)
И действительно, как только наш сентябрьский номер появился в газетных киосках, я обнаружил, что ПК ПроВнутренний клиент CMS работал только – как вы уже догадались – на 32-битной Windows. Попытка создать новый обзор на моем 64-битном рабочем столе привела только к непонятной ошибке об отсутствующей фабрике классов COM.
Под флагами
Немного покопавшись выявили проблему. Какой-то непослушный разработчик написал совершенно корректное 32-битное .NET-приложение, но забыл пометить его как 32-битный код. Таким образом, 64-разрядная версия Windows запускала ее в 64-разрядном режиме, вызывая ошибки, когда программное обеспечение не могло получить доступ к ожидаемым 32-разрядным системным ресурсам.
К счастью, эту проблему легко решить. Microsoft КорФлаги Инструмент командной строки — часть .NET Framework — позволяет изменять флаги заголовков исполняемых файлов, включая тот, который указывает, когда приложение необходимо запускать в 32-битном режиме. Чтобы установить этот флаг для нашего приложения базы данных, нужно было просто набрать Приложение CorFlags.exe /32бит+
И вуаля – одно 32-битное приложение, прекрасно работающее в 64-битной Windows. Стоит попробовать, если вы когда-нибудь столкнетесь с подобной проблемой.
В какой папке Program Files?
Программы для Windows, мобильные приложения, игры - ВСЁ БЕСПЛАТНО, в нашем закрытом телеграмм канале - Подписывайтесь:)
Раз уж я заговорил об этой теме, то вот связанная с этим проблема, с которой мы столкнулись, когда начали обзор компьютеров под управлением 64-битной Vista. В данном случае проблемным программным обеспечением было не что иное, как ПК Про набор реальных тестов. Казалось, все установилось идеально, но когда мы действительно запустили тесты, мы получили ошибки «ресурс не найден».
Я приступил к отслеживанию проблемы с помощью незаменимого инструмента SysInternals. Монитор процессов полезность, и снова объяснение оказалось милосердно простым (настолько простым, что я почувствовал себя немного глупо из-за того, что не придумал его сам).
Различные файлы не были найдены, поскольку в 64-битной Windows папка «Program Files» зарезервирована только для 64-битных приложений. 32-битные программы устанавливаются в папку «Program Files (x86)». Наши тестовые сценарии включали жестко запрограммированные пути, которые не давали результата, поскольку наши 32-разрядные приложения находились не в своем обычном месте.
Если вы столкнулись с такой проблемой, вы можете легко ее решить, удалив явные ссылки на «C:\Program Files\» и вместо этого используя %ProgramFiles% (эта умная переменная среды должна разрешаться либо в «Program Files», либо в «Program Files»). (x86)» в зависимости от того, является ли вызывающий его процесс 64-битным или 32-битным). Если вы не можете получить доступ к источнику и изменить пути, быстрый и грязный обходной путь — вручную скопировать 32-битные файлы в «Program Files». Как только я это сделал, наши тесты заработали без сбоев.
Итак, вот оно: 32-битные приложения делать работать в 64-битной Windows… но иногда вам нужно обойти несколько предположений программиста, чтобы все заработало!