20 января 2015 г.

Запуск 32-битных приложений на 64-битных системах

vlsdtv | 13:51 | Прокоментируй первым!
Из сегодняшнего:
Не запускается 32-битное приложение на 64-битной платформе.
        По идее оно должно быть совместимо и работать как тут, так и там.
Для решения вопросов совместимости есть соответствующие разделы документации и соответствующие инструменты. 
Но не всегда все так сложно - можно обойтись "малой кровью".

Необходимо понимать, что система x64 поддерживает работу 32-битных приложений и для этого эмулирует подходящее окружение. В частности для этого есть специальные разделы реестра в ветке SysWOW64, с которыми работают все 32-битные приложения, в том числе там регистрируются 32-битные COM-приложения. 
      Но есть еще такой малоизвестный факт (не каждый это знает или помнит): системные исполняемые модули на диске так же присутствуют в двух видах: 64-битные по обычным путям %systemroot%, а 32-битные по пути %systemroot%\SysWOW64.
      Вопрос - Как это использовать?
      Если к примеру я хочу зарегистрировать 32-битную DLL, то нужно вызывать:
%systemroot%\SysWOW64\regsvr32.exe <Имя DLL>
      Если я хочу запустить VB-скрипт, который создает 32-битные COM-объекты (например, Internet Explorer или Word), то нужно вызывать:
%systemroot%\SysWOW64\cscript.exe <Имя скрипта>
     Если на конкретной 64-битной системе нужно запускать все скрипты в 32-битном режиме, то можно поменять ассоциацию в реестре. Ключи реестра можно подсмотреть в статье KB248121:
HKEY_CLASSES_ROOT\JSEFile\Shell\Open2\Command
HKEY_CLASSES_ROOT\JSFile\Shell\Open2\Command
HKEY_CLASSES_ROOT\VBEFile\Shell\Open2\Command
HKEY_CLASSES_ROOT\VBSFile\Shell\Open2\Command
HKEY_CLASSES_ROOT\WSFFile\Shell\Open2\Command
(Все значения наверное лучше не менять - только для нужного скриптового языка)
Пример:
Старое значение:
Default = C:\Windows\System32\CScript.exe “%1″ %*
Новое значение:

Default = C:\Windows\System32\ SysWOW64\CScript.exe “%1″ %*
Читать далее ...

Search