4

我希望能够在 mshta.exe 的 32 位和 64 位版本中启动 page.hta。

创建文件 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 的逻辑。

使用指定为默认处理程序的任何命令。

4

2 回答 2

1

也许这是一个操作系统版本问题(?)我无法判断,因为您的测试在我的 XP x64 上按预期运行。

[编辑] 我运行的代码:

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

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

这是我得到的: 测试截图

于 2013-03-20T03:59:57.933 回答
0

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”。

根据您的系统,您需要打开具有所需位数的命令外壳 - 请参阅上面的链接。

于 2011-08-02T14:36:06.580 回答