Современные компьютеры в большинстве случаев поставляются с установленной операционной системой Windows 10 64 bit. Даже бюджетные модели уже имеют 3 и более Гбайт оперативной памяти, что позволяет задействовать системе всю мощь 64-битной разрядности обработки данных.
Подробнее о преимуществах 64 bit над 32 bit Windows вы можете прочитать в нашей статье «Преимущества перехода на 64 бита».
Но, как бы не была привлекательна 64-разрядная система, зачастую пользователь просто не имеет в своем распоряжении 64-битной программы, с которой он давно работает и которая его полностью устраивает, т.к. производитель ее просто не выпустил. Как правило, такие программы устанавливаются в Windows в отдельную папку \Program Files (x86) и их запуск осуществляется в 32-разрядном режиме.
Если в процессе запуска программа выдает ошибку или вообще не запускается, а в Windows 32 bit она работала без проблем, есть шанс запустить ее в специальном режиме, который разработчики назвали «Режим совместимости».
Для этого в Windows 7 щелкните правой кнопкой мыши на ярлыке нужной программы, а затем выберите в контекстном меню «Свойства». В открывшемся окне перейдите на вкладку «Совместимость» и установите флажок «Запустить программу в режиме совместимости с …» и в выпадающем списке укажите вариант системы для запуска.
Нажмите кнопку «OK». После этого попробуйте запустить вашу программу.
Кроме того, в контекстном меню Проводника также имеет смысл попытаться автоматически решить задачу, кликнув по строке «Исправление неполадок совместимости» — в Windows 7.
В Windows 10 при настройке запуска в совместимом режиме на вкладке «Совместимость» имеется отдельная кнопка «Запустить средство устранения проблем с совместимостью». После чего вам предложат либо использовать рекомендованные параметры, либо провести диагностику программы.
Если и после этого программа не запустилась, то стоит подойти к проблеме более основательно и попробовать варианты, указанные на официальном сайте Microsoft.
Более радикальным методом запуска программы является ее установка и использование в виртуальной машине с установленной Windows 7 32 bit. Подробнее, как установить и настроить виртуальную машину вы можете почитать в нашей статье «Как создать и настроить на ПК виртуальную ОС?».
Читайте также:
- Как переключиться с Windows 32 на 64 бита: все плюсы и минусы перехода
- Как запускать системные утилиты в Windows 7 без раздражающих запросов UAC, не отключая его
Фото: компании-производители, pexels.com
На прошлой неделе Microsoft в рамках своего традиционного Patch Tuesday выпустила ряд важных обновлений безопасности (обзор обновлений за август 2013 смотри на сайте Microsoft). По результатам установок патчей оказалось, что как минимум в 3 их 8 бюллетеней безопасности являются просто-напросто опасными!
Например, бюллетень MS13-061, который должен устранить уязвимость удаленного выполнения кода в почтовой системе Exchange, вызывает ошибки индексации почтовых сообщений в почтовых хранилищах.
Бюллетень MS13-066, который описывается, как патч, устраняющий возможность раскрытия информации в серверных службах Active Directory Federation Services (ADFS), после установки может вызвать полный отказ в работе ADFS.
И самым критичной и массовой проблемой, затронувшей множество рядовых пользователей Windows, является обновление KB2859537 (входит в состав бюллетеня MS13-063). Установка данного обновления в некоторых случаях блокирует запуск почти всех приложений, в том числе различных элементов настройки системы в «Панели управления» и браузера Internet Explorer. Выглядит проблема так: после установки обновления KB2859537 и перезагрузки системы при попытке запустить практически любое приложение, появляется следующая ошибка: «Ошибка при запуске приложения (0xc0000005). Для выхода из приложения нажмите кнопку «ОК»».
Если пробежаться по последним топикам технических ИТ форумов то они буквально пестрят темами типа:
Ошибка при запуске приложения 0хс0000005
Не запускаются программы (ошибка 0xc0000005)
перестали запускаться проги на буке
Не запускаются 32-bit приложения после установки обновления
Помогите! 0xc0000005
Что характерно, большинство тем такого рода, наблюдается в основном в русскоязычном сегменте Интернета. Проблемы наблюдаются в основном с десктопной Windows 7 и серверной Windows 2008 R2.
Обновление KB2859537 заменяет ряд системных файлов, в том числе ряд файлов ядра и кучу вспомогательных библиотек (http://support.microsoft.com/kb/2859537). В том случае, если ядро модифицировано (а это почти всегда так в различных сборках Windows и в случае использования патчей для нелегальной активации), на некоторых x64 системах установка обновления может вызвать невозможность запуска 32-битных программ и они аварийно завершаются с ошибкой 0×0000005 / 0xc0000005. По последним данным, ошибке 0xc0000005 подвержены пиратские операционные системы, активированные различными активаторы с собственной копией ядра системы с внесенными изменениями для обхода системы активации
По мнению участника форума OSZone simplix проблема данного обновления связана с тем, что во многих системах со взломанной активацией используется старая версия ntoskrnl.exe, которая патчером или сборщиком переименовывается в xNtKrnl.exe и прописывается в поле kernel через bcdedit. Необходимо это для того, чтобы система работала с драйвером, эмулирующим SLIC-таблицу. Однако старое ядро не совместимо с новыми файлами подсистемы Wow64, и именно по этой причине на x64 системах перестают запускаться 32-битные программы. Т.е. патч заменяет только официальное ядро, а взломанное остается нетронутым и продолжает работать, но поскольку обновление также содержит и другие компоненты (в т.ч. Wow64), то они просто оказываются несовместимы друг с другом. И вины Microsoft в том, что они не тестировали обновления на ломаных сборках абсолютно никакой – новая версия ядра патчится корректно.
С помощью bcededit можно определить, что если имеется параметр kernel и ссылается он на файл xNtKrnl.exe (имя старого пропатченного ядра), значит установка обновления с вероятностью 99% вызовет проблемы.
Способы устранения ошибки 0xc0000005
Чтобы оперативно устранить ошибку 0xc0000005, необходимо удалить обновление KB2859537 или сделать откат на точку восстановления системы предшествующую его установке (что, впрочем не всегда помогает).
Удалить KB2859537 можно из графического интерфейса GUI или с помощью командной строки.
Удаление KB2859537 с помощью графического интерфейса
- Перейдите в Панель управления->Программы и компоненты
- Слева нажмите ссылку «Просмотр установленных обновлений»
- В списке ранее установленных обновлений найдите KB2859537 (от 14-18 августа 2013)
- Щелкните по обновлению правой кнопкой мыши и выберите пункт «Удалить»
- После удаления обновления перезагрузите систему
Удаляем обновление KB2859537 из командной строки.
Альтернативный способ удаления данного обновления с помощью командной строки:
- Запустите командую строку с правами администратора
- Убедимся, что искомое обновление установлено в системе (методика из статьи «Вывод списка установленных обновлений Windows»), набрав команду
wmic qfe list | find "KB2859537"
- Если команда вернула строку с датой установки обновления, удалим его с помощью команды wusa (автономная утилита по установке/удалению обновлений Windows):
wusa.exe /uninstall /kb:2859537
- Перезагрузите систему
Удаления обновления KB2859537 с помощью загрузочного диска
Примечание! Если описанные выше методики не сработали, или же система отказывается грузиться в обычном режиме (падает в BSOD), можно попробовать удалить обновление из среды восстановления Windows так.
Если под рукой есть диск со средой MSDart 6.5 или выше (ex. Erd Commander), удалить любое обновление можно, загрузившись с него и воспользовавшись программой Hotfix Uninstall.
Если под рукой имеется только загрузочный/установочный диск с Windows 7/8, необходимо:
- Загрузится с него, открыть командную строку и выполнить команду:
DISM /Image:D:\ /Get-Packages
, где D – буква диска, на котором установлена система (скорее всего она будет отличаться от назначенных в системе, определить ее можно по этой методике).
- Найдите и скопируйте имя пакета, начинающееся с Package_for_KB2859537… например, Package_for_KB2859537~31af3253ad364e34~x86~~6.1.1.0)
- Удалите обновление с помощью DISM:
DISM /Image:D:\ /Remove-Package /PackageName:Package_for_KB2859537~31af3253ad364e34~x86~~6.1.1.0
- После удаления апдейте перезагрузите систему, попробуйте загрузиться в нормальном режиме и убедитесь, что KB2859537 отсутствует в списке установленных обновлений в панели управления.
В компании Microsoft заявляют, что обновление KB2859537 не нацелено на борьбу с пиратскими системами.
Указанные обновления были признаны компанией Microsoft бракованными и отозваны из «Центра обновления». Одной из причин наличия серьезных ошибок в выпущенных обновлениях публикации Microsoft назвала недостаточно качественное тестирование.
- Накладные расходы
- Преимущество 64-битной среды для 32-битных программ
- Перенаправления
- Почему невозможно использовать в 64-битной программе 32-битные DLL? Можно ли это обойти?
- Постепенный отказ от поддержки 32-битных программ
- Дополнительная информация
Прежде чем приступить к тематике разработки кода 64-битных программ, остановимся на вопросе обратной совместимости 64-битных версий Windows с 32-битными приложениями. Обратная совместимость осуществляется за счет механизмов, реализованных в WoW64.
WoW64 (Windows-on-Windows 64-bit) — подсистема операционной системы Windows, позволяющая запускать 32-битные приложения на всех 64-битных версиях Windows.
Подсистема WoW64 не поддерживает следующие программы:
- программы, скомпилированные для 16-разрядных операционных систем;
- программы режима ядра, скомпилированные для 32-разрядных операционных систем.
Накладные расходы
Существуют различия WoW64 в зависимости от архитектуры процессора. Например, 64-битная версия Windows разработанная для процессора Intel Itanium 2 использует WoW64 для эмуляции x86 инструкций. Такая эмуляция весьма ресурсоемка по сравнению с WoW64 для архитектуры Intel 64, так как происходит переключение с 64-битного режима в режим совместимости при выполнении 32-битных программ.
WoW64 на архитектуре Intel 64 (AMD64 / x64) не требует эмуляции инструкций. Здесь подсистема WoW64 эмулирует только 32-битное окружение за счет дополнительной прослойки между 32-битным приложением и 64-битным Windows API. Где-то эта прослойка тонкая, где-то не очень. Для средней программы потери в производительности из-за наличия такой прослойки составят около 2%. Для некоторых программ это значение может быть больше. Два процента — это немного, но следует учитывать, что 32-битные приложения работают немного медленнее под управлением 64-битной операционной системы Windows, чем в 32-битной среде.
Компиляция 64-битного кода не только исключает необходимость в WoW64, но и дает дополнительный прирост производительности. Это связано с архитектурными изменениями в микропроцессоре, такими, как увеличение количества регистров общего назначения. Для средней программы можно ожидать в пределах 5-15% прироста производительности от простой перекомпиляции.
Преимущество 64-битной среды для 32-битных программ
Из-за наличия прослойки WoW64 32-битные программы работают менее эффективно в 64-битной среде, чем в 32-битной. Но все-таки простые 32-битные приложения могут получить одно преимущество от их запуска в 64-битной среде. Вы, наверное, знаете, что программа, собранная с ключом /LARGEADDRESSAWARE:YES, может выделять до 3-х гигабайт памяти, если 32-битная операционная система Windows запущена с ключом /3gb. Так вот, эта же 32-битная программа, запущенная на 64-битной системе, может выделить почти 4 GB памяти (на практике около 3.5 GB).
Перенаправления
Подсистема WoW64 изолирует 32-разрядные программы от 64-разрядных путем перенаправления обращений к файлам и реестру. Это предотвращает случайный доступ 32-битных программ к данным 64-битных приложений. Например, 32-битное приложение, которое запускает файл DLL из каталога %systemroot%\System32, может случайно обратиться к 64-разрядному файлу DLL, который несовместим с 32-битной программой. Во избежание этого подсистема WoW64 перенаправляет доступ из папки %systemroot%\System32 в папку %systemroot%\SysWOW64. Это перенаправление позволяет предотвратить ошибки совместимости, поскольку при этом требуется файл DLL, созданный специально для работы с 32-разрядными приложениями.
Подробнее с механизмами перенаправления файловой системы и реестра можно познакомиться в разделе MSDN «Running 32-bit Applications».
Почему невозможно использовать в 64-битной программе 32-битные DLL? Можно ли это обойти?
Загрузить 32-битную DLL из 64-битного процесса и выполнить код из неё невозможно. Невозможно в силу дизайна 64-битных систем. В принципе, невозможно. Не помогут ни хитрости, ни недокументированные пути. Для этого нужно загрузить и проинициализировать WoW64, не говоря уже о структурах в ядре. Фактически нужно будет на лету превратить 64-битный процесс в 32-х битный. Подробнее эта тема рассмотрена в посте «Недокументированные функции; Загрузка 32-х битных DLL в 64-х битный процесс». Единственное, что можно порекомендовать, — это создание суррогатного процесса и взаимодействия с ним посредством технологии COM. Об этом рассказывается в статье «Accessing 32-bit DLLs from 64-bit code».
А вот загрузить ресурсы из 32-битной DLL в 64-битный процесс совсем несложно. Это можно сделать, если при вызове LoadLibraryEx указать флаг LOAD_LIBRARY_AS_DATAFILE.
Постепенный отказ от поддержки 32-битных программ
Вполне естественно, если компания Microsoft будет стимулировать переход на 64-битные системы, постепенно отказываясь от поддержки 32-битных программ в ряде версий операционной системы Windows. Конечно, это будет очень медленный процесс. Но все-таки первые шаги в этом направлении уже сделаны.
Многие администраторы знают про относительно новый режим установки и работы серверной версии операционной системы под названием Server Core. Это тот режим, о котором участники войн «Windows vs Linux» говорили очень давно. Одним из аргументов сторонников использования Linux на сервере была возможность установить серверную ОС без графического интерфейса (GUI). Но вот и в Windows Server появилась такая возможность. Установка в этом режиме позволяет получить только командную строку без пользовательского интерфейса.
Эта возможность (установка Server Core) появилась в Windows Server 2008. Но в Windows Server 2008 R2 появилось нововведение, приближающее 64-битное будущее. При установке Windows Server 2008 R2 (Server Core) поддержка запуска 32-битных приложений стала опциональной. Причем по умолчанию эта поддержка выключена. И при попытке запуска 32-битного приложения в режиме Server Core пользователь получит сообщение о невозможности запуска. Конечно, можно добавить поддержку 32-битных программ:
start /w ocsetup ServerCore-WOW64
В обычном (Full Installation) режиме 32-битные приложения по умолчанию запускаются, а вот в Server Core уже нет.
Тенденция очевидна. Со временем все более рациональным будет создание 64-битных версий приложений, так как они смогут функционировать на большем числе версий операционных систем.
Дополнительная информация
Интересным источником информации по системе WoW64 является блог Алексея Пахунова: http://blog.not-a-kernel-guy.com/. Алексей является сотрудником компании Microsoft и принимает непосредственное участие в разработке подсистемы WoW64.
Авторы курса: Андрей Карпов (karpov@viva64.com), Евгений Рыжков (evg@viva64.com).
Правообладателем курса «Уроки разработки 64-битных приложений на языке Си/Си++» является ООО «Системы программной верификации». Компания занимается разработкой программного обеспечения в области анализа исходного кода программ. Сайт компании: http://www.viva64.com.
Данная настройка выполняется в случае, если веб-клиент 1С: Предприятие является 32-разрядным приложением. Поэтому для 64-разрядной ОС необходимо разрешить работу оных в пуле приложений сервера IIS.
Для того, чтобы настроить разрешение 32-разрядных приложений:
- Перейдите [Пуск] – [Панель управления] – [Администрирование] – [Диспетчер служб IIS]
- В диспетчере служб выберите [Пулы приложений] – [DefaultAppPool] – [Дополнительные параметры]
- В списке дополнительных параметров переменной [Разрешены 32-разрядные приложения] установите значение [True]:
- Установите значение в [True] для параметра [Разрешены 32-разрядные приложения]:
Был ли данный материал полезен вам?
Да
2
Нет
2
SolVPS
|
Published: August 24, 2017
Running 32-bit Programs
Ideally, running 32-bit applications on 64-bit versions of Windows Server will “just work.” 64-bit editions of Windows are compatible with 32-bit programs by default, and the C:\Program Files (x86) folder is designated for these applications. The system runs 32-bit applications as part of the default Windows OS.
If you are having trouble launching an application on 64-bit Windows, try the steps below to run a 32-bit program on Windows Server.
1. Check the program is installed to C:\Program Files (x86). If not, Uninstall and then Install the program again with C:\Program Files (x86) selected as the installation path.
2. Launch the program from the 32-bit emulated Command Prompt. Click Start > Run, and enter:
%SystemRoot%\SYSWOW64\cmd.exe
Command Prompt should open. Now type the path to your installed 32-bit application .exe and press enter.
WOW64 is the x86 emulator that allows 32-bit Windows-based applications to run seamlessly on 64-bit Windows. WOW64 is provided with the operating system and does not have to be explicitly enabled.
For more info, visit: https://msdn.microsoft.com/en-us/library/windows/desktop/aa384249%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396
Running 16-bit Programs
Note that 64-bit Windows does not support running 16-bit Windows-based applications. The primary reason is that handles have 32 significant bits on 64-bit Windows. Therefore, handles cannot be truncated and passed to 16-bit applications without loss of data. Attempts to launch 16-bit applications fail with the following error: ERROR_BAD_EXE_FORMAT.
This article applies to:
- Windows Server 2016
- Windows Server 2012 R2
- Windows Server 2008 R2
This entry was posted in VPS Hosting, Windows Server, Windows VPS. Bookmark the permalink. Trackbacks are closed, but you can post a comment.