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

Я бы хотел иметь возможность запуска 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 ]

1 голос
/ 20 марта 2013

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

[ПРАВИТЬ] Код, который я запускаю:

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

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

Вот что я получаю: test screenshot

0 голосов
/ 02 августа 2011

папки 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».

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

...