MSHTML到底是什麼,現在越來越糊塗了。
Lostinet在結合 MSHTML 與 WebBrowser 產生美觀實用的 WinForm 應用程式一文給出的例子中引用的是MSHTML(COM組件)
對此,我在mshtml組件的引用一文中提出可以引用.Net組件Microsoft.mshtml,木野狐對此提出過反對的意見,我還沒搞明白呢,今天就遇到了實質的問題:
做的一個小程式,在WinXP作業系統上運行正常(電腦上裝過Visual Studio .Net,注意不止是.Net Framework),在另外兩台只裝過.Net Framework的Win2000作業系統的電腦上運行,涉及到MSHTML的表單出現了如下的錯誤提示:
(鬼才知道這是什麼提示,提示資訊一點都不詳細……)
經分析,確定是MSHTML的問題。不過我發現,在程式的運行目錄中竟然沒有Microsoft.mshtml.dll,換成引用COM組件(MSHTML)也是一樣,程式運行目錄中沒有一個dll檔案是關於mshtml的。
按照實現應用程式中的並行組件共用(已擴充)中的方法將“DLL\COM重新導向”,複製一份Microsoft.mshtml.dll到程式運行目錄中,在程式運行目錄中建立一個名為“程式檔案名稱.exe.local”的空檔案,程式就運行正常了。
然後發現,如果在項目中刪除對任何關於mshtml組件的引用,直接複製一份Microsoft.mshtml.dll檔案到程式運行目錄中,直接添加對該dll檔案的引用,程式同樣運行正常。
Oh,My God!MSHTML到底是什麼呀?一般的COM組件會將dll檔案自動複製到程式運行目錄中的呀?
呵呵,發現其實Microsoft.mshtml.dll在 系統路徑:\Program Files\Microsoft .Net\Primary Interop Assemblies\ 目錄下的(在給木野狐的回複中就發現了),原來,Visual Studio .NET 安裝程式自動註冊和安裝了ADO和MSHTML等通用COM 組件的primary Interop Assembly作為.NET架構提供的一種最佳化的運行庫可調用的封裝容器 (RCW)。
這樣,在引用MSHTML時應該盡量選用primary Interop Assembly,因為它帶有COM組件出版商數位簽章。
----------------------------------------------------------------
另外,我在網上看到過有人遇到過上面的錯誤,沒有找到解決方案,但我忘了是在哪裡看到的,希望他能看到這篇文章。