依之前研究,Windows 11 已無法安裝 IE11,雖然還可以使用 Edge 切換 IE 模式,但 IE 是內嵌在 Edge 內執行,無法像 Windows 10 開啟一個獨立的 IE11 應用程式。

雖然 Edge 的 IE 模式已可滿足使用 IE Only 舊網頁需求,但若能讓 IE 跟 Edge 依用途區分,似乎是不錯的點子,告知使用者:平常上網請一律用 Edge/Chrome,只有當要使用 XX 系統時再改開 IE,把 IE 當成 XX 系統的專屬客戶端軟體,感覺更清楚明瞭。

只是,雖然 Windows 11 在 C:\Program Files (x86)\Internet Explorer 有個熟悉的 iexlplore.exe,但點擊它啟動的是 Edge 而非我們預期的 IE。

昨天的企業 IE 保育指南 PO 文後,在專頁留言區讀者 Longtime Chou 分享了一記妙招(特此感謝),透過幾行 VBScript 便能在 Windows 11 讓 IE 還魂,繼續以獨立應用程式模式執行,讓老飛行員們重溫熟悉的 F14 儀表板。

今天小試了一下,真的可以耶!!

做法很簡單,將以下內容儲存成 IE.vbs 放在桌面:

StartURL = "about:blank" 
set IE = CreateObject("InternetExplorer.Application") 
IE.Visible = true 
IE.Navigate StartURL 

點兩下,熟悉的 IE 就回來了!

覺得用 .vbs 開 IE 不到位,我用 .NET 6 翻寫配上 IE 圖示編譯成 .exe,做出更完美的復刻版! .NET 6 建立 InternetExplorer.Application COM 物件的方法可參考 MVP Rick Strahl 這篇 COM Object Access and dynamic in .NET Core 2.x,以下是我參考改寫的 ClassicIE/Program.cs:

using System.Reflection;
var MemberAccess =
    BindingFlags.Public | BindingFlags.NonPublic |
    BindingFlags.Static | BindingFlags.Instance | BindingFlags.IgnoreCase;
var type = Type.GetTypeFromProgID("InternetExplorer.Application");
var ie = Activator.CreateInstance(type);
ie.GetType().InvokeMember("Visible", MemberAccess | BindingFlags.SetProperty, null, 
    ie, new object[1] { true });
ie.GetType().InvokeMember("Navigate", MemberAccess | BindingFlags.InvokeMethod, null,
    ie, new object[] { "about:blank" });

以下影片會依序展示 Windows 11 的 iexplore.exe 啟動 Edge 的行為、使用 VBScript 啟動 IE 獨立應用程式,以及用復刻版 ClassicIE.exe 啟動 IE。(想使用 ClassicIE.exe 的朋友請參考這篇)

操作影片

不過,這次在 VM 實測發現:Windows 11 剛安裝好時,用以上做法會啟動 Edge 而非 IE,直到裝完最新 Windows Update 才成功;故這招很有可能在未來某次更新後失效。現階段如果你很想在 Windows 11 上執行獨立的 IE,倒是可以試試,但記得快點把 IE Only 系統翻修成現代網頁,別再拖下去了!

Tips of how to launch IE program in Windows 11.


Comments

# by noe

不好意思打擾了,有提供寫好的ClassicIE.exe下載嗎

# by ChrisTorng

我看執行出來的程式命令列是: "C:\Program Files\Internet Explorer\iexplore.exe" -Embedding。試著直接執行,可以看到有 process 建立,但沒看到畫面。想說就是 Embedding 模式沒有畫面,因此需要設定 Visible = true 讓視窗顯示出來吧。 雖說可以使用,但不能肯定這樣的方法是否仍算是有官方支援。依我的推測是有支援的。微軟只是把原本的那個入口程式改為開 Edge,但底層的所有相關元件仍然有安裝,也還是在 Windows Update 安全性更新的保護範圍內。 如果 ClassicIE 程式能支援傳入網址參數,甚至支援原本 IE 的其他選擇性參數就更理想了!

# by ChrisTorng

取得 COM 物件後應該可以做很多事情。這個專案可以好好發展成一個成熟的 IE 替代品?

# by Jeffrey

to noe, 要不要花 3 分鐘 DIY?https://blog.darkthread.net/blog/build-net6-projects-for-dummies/

Post a comment


96 - 12 =