【问题标题】:Executing 32bit and 64bit mshta.exe (bypass default handler)执行 32 位和 64 位 mshta.exe(绕过默认处理程序)
【发布时间】:2011-03-16 20:12:13
【问题描述】:

我希望能够在 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。

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

【问题讨论】:

    标签: hta win64


    【解决方案1】:

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

    [编辑] 我运行的代码:

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

    这是我得到的:

    【讨论】:

    • 那么在同一个 64 位操作系统中,您是否使用批处理文件来启动带有 mshta.exe 的 hta?
    • 是的,我和你一样使用批处理文件,它使用mshta.exe(来自SysWOW64System32)运行.hta。
    • 命令 shell cmd.exe 是 64 位 也是如此。如果您运行32 位版本的cmd.exe (%WinDir%\SysWOW64\cmd.exe),那么在这两种情况下都将启动mshta.exe 的32 位版本,并且页面将显示Platform=Win32
    • @AlexeyIvanov - 那么,我是唯一一个幸运地将mshta.exe 作为 64 位进程运行的人吗?如果我们提及我们的操作系统版本,我认为我们可以让我们的 cmets 更有用。
    • @PanayotKarabakalov 我在 64 位 Windows 7 上对其进行了测试。你没有写你看到的。它总是启动 64 位版本吗?你如何启动你的批处理文件?
    【解决方案2】:

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

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

    【讨论】:

    • 您能否更具体地说明如何绕过默认处理程序?
    • 我很困惑你为什么要引入 iexplore.exe?我从来没有在问题中提到 iexplore.exe。
    • 你想绕过默认处理程序......最终.hta是IE可以执行的html应用程序......上面你可以在32和64位之间选择
    • IE 和 MSHTA 可能都使用msdn.microsoft.com/en-us/library/…,但这并不意味着它们是相同的。
    • 我知道它们不一样,但我怀疑 IE 是最接近绕过默认处理程序并在 32 位和 64 位之间进行选择的东西。
    猜你喜欢
    • 2013-07-27
    • 1970-01-01
    • 2014-11-06
    • 2018-02-26
    • 2021-03-29
    • 2014-02-05
    • 2016-01-12
    • 2012-09-01
    • 2011-04-19
    相关资源
    最近更新 更多