Выполнение 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".
В зависимости от используемой вами системы вам нужно открыть командную оболочку с нужной битностью - см. Ссылку выше.