Выполнение 32-битного и 64-битного mshta.exe (обходить обработчик по умолчанию)

Я хотел бы иметь возможность запустить page.hta в 32-битной и 64-битной версиях mshta.exe.

Создайте файл c:\page.hta

<body onclick="if(confirm('Close? (onclick)')){self.close();}">
<h1>Test Page</h1>
<script type="text/javascript">
var elem = [
  "UserAgent="+window.navigator.userAgent,
  "Platform="+window.navigator.platform
];
var taBegin = "<textarea style='width:100%' rows='"+((elem.length+1)*1.5)+"'>";
var taEnd = "</textarea>";
document.write(taBegin+elem.join("\n")+taEnd);
</script>
</body>

Теперь вот пакетный файл, чтобы попытаться загрузить страницу по-другому.

@echo off
rem Launch 32bit
c:\Windows\SysWOW64\mshta.exe c:\page.hta

rem Launch 64bit
c:\Windows\System32\mshta.exe c:\page.hta

Еще одна интересная вещь, попробуйте изменить стандартный обработчик на блокнот для файлов.hta. Если вы выполняете предыдущие команды, и он запускает блокнот. Похоже, что у mshta есть логика, которая запускает.hta только через обработчик по умолчанию.

Какая бы команда не указана в качестве обработчика по умолчанию, используется.

2 ответа

Может быть, это проблема версии ОС (?), Которую я не могу сказать, поскольку ваш тестовый запуск, как и ожидалось, на моем XP x64.

[EDIT] код, который я запускаю:

Rem run32.bat
%WinDir%\SysWOW64\mshta.exe c:\page.hta

Rem run64.bat
%WinDir%\System32\mshta.exe c:\page.hta

Вот что я получаю:тестовый скриншот

Папки system32/systemwow64 являются "виртуальными" в том смысле, что их содержимое определяется ОС в зависимости от битности доступа к приложению - в вашем случае cmd.exe, вероятно, является 64-битной версией, поэтому он всегда запускает 64-битную версия mshta.exe

для запуска командной строки в 32-разрядной версии см. http://astatalk.com/thread/7382/0/How_to_Open_and_Run_32-bit_Command_Prompt_in_x64_Windows/

это также может помочь использовать SysNative вместо system32 и посмотреть, как тогда работает mshta.exe...

mshata.exe, кажется, просто использует стандартные настройки для.hta, так что, вероятно, не имеет значения, запускаете ли вы 32-битную или 64-битную версию mshta.exe - вы можете попробовать связать.hta с 32-битной версией вашего браузера...

Если вы хотите обойти это, тогда вы можете просто вызвать браузер (32-битный или 64-битный) прямо в вашем пакетном файле...

РЕДАКТИРОВАТЬ - согласно комментарию:

Для 64-битного исполнения вы можете использовать "C:\Program Files\Internet Explorer\iexplore.exe" в вашем командном файле и
для 32-битного исполнения вы используете "C:\Program Files (x86)\Internet Explorer\iexplore.exe".

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

Другие вопросы по тегам