我正在编写一个脚本,该脚本应该从 Internet Explorer 中的链接安装一些软件,不幸的是,该站点需要 32 位 Internet Explorer 才能工作。有没有办法强制 32 位 Internet Explorer 窗口在 64 位机器上打开?在 32 位机器上运行时,该脚本运行良好。
$ie = New-Object -ComObject InternetExplorer.Application
$ie.Navigate2($url)
$ie.Visible = $true
我正在编写一个脚本,该脚本应该从 Internet Explorer 中的链接安装一些软件,不幸的是,该站点需要 32 位 Internet Explorer 才能工作。有没有办法强制 32 位 Internet Explorer 窗口在 64 位机器上打开?在 32 位机器上运行时,该脚本运行良好。
$ie = New-Object -ComObject InternetExplorer.Application
$ie.Navigate2($url)
$ie.Visible = $true
$url = "http://www.google.com"
$shell = New-Object -ComObject WScript.Shell
$shell.Exec("C:\Program Files (x86)\Internet Explorer\iexplore.exe $url") | Out-Null
powershell.exe
一种解决方案是使用文件夹下的完整路径SysWOW64
(C:\windows\syswow64\WindowsPowerShell\v1.0\powershell.exe)显式启动32 位版本并运行您的脚本。
需要注意的是,MSIE 的位级别很大程度上取决于版本。IE9 有单独的 32/64 位版本,可以独立执行,但 IE10+ 是完全 64 位内核(在 64 位系统上),其子进程可以基于逻辑树以 32 位或 64 位运行页面(参见下面的链接)。增强保护模式 (EPM) 可以强制不受信任的站点以完整的 64 位模式运行(有关详细信息,请参阅下面的文章)。这导致许多附加组件与 EPM 不兼容,例如 Adobe Reader 的浏览器内查看器,在 v11.0.7 之前它没有支持 64 位的组件(EPM 强制执行 64 位)。
我不知道如何实现您正在寻找的东西,但上述信息可能会帮助您避免陷入困境。
我不知道 PowerShell 的答案,但在 C 中你会传递CLSCTX_ACTIVATE_32_BIT_SERVER
给CoCreateInstance
. 也许您知道如何将其转换为 PowerShell-land?
注意:在我这样做的代码中,有一条评论:“在 32 位 XP 上存在此标志会使调用失败”(随后是针对微软 API 开发人员的一些暴力威胁,我不会在此处发布) . 只有在 64 位 Windows 上运行时,代码才会继续添加标志。
解决问题的最简单方法是以 32 位启动 Powershell。
发射
Windows Powershellx86
小路
C:\Windows\syswow64\Windowspowershell\v1.0\powershell.exe