備註
本文專屬於 .NET Framework。 它不適用於較新的 .NET 實作,包括 .NET 6 和更新版本。
Common Language Runtime (CLR) 啟用系統會決定將用來執行受控應用程式程式代碼的 CLR 版本。 在某些情況下,啟用系統可能無法找到要載入的 CLR 版本。 當應用程式需要無效或未安裝在指定計算機上的 CLR 版本時,通常會發生這種情況。 如果找不到要求的版本,CLR 啟用系統會從呼叫的函式或介面傳回 HRESULT 錯誤碼,並可能會向執行應用程式的使用者顯示錯誤訊息。 本文提供 HRESULT 程式代碼清單,並說明如何防止顯示錯誤訊息。
CLR 提供記錄基礎結構來協助您偵錯 CLR 啟用問題,如如何:偵錯 CLR 啟用問題中所述。 此基礎結構不應與 元件系結記錄混淆,這完全不同。
CLR 啟用 HRESULT 代碼
CLR 啟用 API 會傳回 HRESULT 程式代碼,以向主機報告啟用作業的結果。 CLR 主機務必查閱這些傳回值,再繼續進行其他作業。
CLR_E_SHIM_RUNTIMELOAD
CLR_E_SHIM_RUNTIMEEXPORT
CLR_E_SHIM_INSTALLROOT
CLR_E_SHIM_INSTALLCOMP
CLR_E_SHIM_LEGACYRUNTIMEALREADYBOUND(舊版運行時已綁定的錯誤)
CLR_E_SHIM_SHUTDOWNINPROGRESS
初始化錯誤的UI
如果 CLR 啟用系統無法載入應用程式所需的正確運行時間版本,則會向使用者顯示錯誤訊息,告知他們電腦未正確設定為執行應用程式,並為他們提供補救情況的機會。 在此情況下,通常會顯示下列錯誤訊息。 用戶可以選擇 [ 是 ] 前往Microsoft網站,讓他們可以下載應用程式的正確 .NET Framework 版本。
:
解決初始化錯誤
身為開發人員,您有各種不同的選項可控制 .NET Framework 初始化錯誤訊息。 例如,您可以使用 API 旗標來防止顯示訊息,如下一節所述。 不過,您仍必須解決導致應用程式無法載入要求運行時間的問題。 否則,您的應用程式可能完全無法執行,或某些功能可能無法使用。
若要解決基礎問題並提供最佳的用戶體驗(較少的錯誤訊息),我們建議下列各項:
針對 .NET Framework 3.5(和更早版本)應用程式:設定您的應用程式以支援 .NET Framework 4 或更新版本(請參閱 指示)。
針對 .NET Framework 4 應用程式:安裝 .NET Framework 4 可轉散發套件作為應用程式設定的一部分。 請參閱 開發人員的部署指南。
控制錯誤訊息
顯示錯誤訊息來傳達找不到要求的 .NET Framework 版本,可視為對用戶有幫助的服務或輕微的煩惱。 不論是哪一種情況,您都可以將旗標傳遞至啟用 API 來控制此 UI。
ICLRMetaHostPolicy::GetRequestedRuntime 方法接受METAHOST_POLICY_FLAGS列舉成員做為輸入。 如果找不到要求的 CLR 版本,您可以包含METAHOST_POLICY_SHOW_ERROR_DIALOG旗標來要求錯誤訊息。 根據預設,不會顯示錯誤訊息。 ( ICLRMetaHost::GetRuntime 方法不接受此旗標,也不會提供任何其他方式來顯示錯誤訊息。
Windows 提供 SetErrorMode 函式,可讓您用來宣告是否要以程式內執行的程式代碼結果顯示錯誤訊息。 您可以指定 SEM_FAILCRITICALERRORS 標誌,以防止顯示錯誤訊息。
不過,在某些情況下,請務必忽略應用程式設定的 SEM_FAILCRITICALERRORS 設定。 例如,如果您有裝載 CLR 的原生 COM 元件,且該元件位於已設定 SEM_FAILCRITICALERRORS 的進程中,您可能會想要覆寫旗標,這取決於在該特定應用程式進程內顯示錯誤訊息的影響。 在此情況下,您可以使用下列其中一個旗標來覆寫SEM_FAILCRITICALERRORS:
請使用 METAHOST_POLICY_IGNORE_ERROR_MODE 搭配 ICLRMetaHostPolicy::GetRequestedRuntime 方法。
使用 RUNTIME_INFO_IGNORE_ERROR_MODE 搭配 GetRequestedRuntimeInfo 函式。
CLR 提供的主機 UI 原則
CLR 包含一組適用於各種案例的主機,這些主機會在載入所需的運行時間版本時遇到問題時顯示錯誤訊息。 下表提供主機及其錯誤訊息原則的清單。
CLR 主機 | 說明 | 錯誤訊息原則 | 錯誤訊息是否可以停用? |
---|---|---|---|
受控EXE主機 | 啟動受控制的EXE檔案。 | 如果遺漏 .NET Framework 版本,則會顯示 | 否 |
受控 COM 主機 | 將受控式 COM 元件載入進程。 | 如果遺漏 .NET Framework 版本,則會顯示 | 是,藉由設定SEM_FAILCRITICALERRORS旗標 |
ClickOnce 主機 | 啟動 ClickOnce 應用程式。 | 當缺少 .NET Framework 版本時會顯示,此情況從 .NET Framework 4.5 開始。 | 否 |
XBAP 主機 | 啟動 WPF XBAP 應用程式。 | 當缺少 .NET Framework 版本時會顯示,此情況從 .NET Framework 4.5 開始。 | 否 |
Windows 8 操作方式和使用者介面
CLR 啟用系統在 Windows 8 上提供與 Windows作系統其他版本相同的行為和 UI,除非載入 CLR 2.0 時發生問題。 Windows 8 包含使用 CLR 4.5 的 .NET Framework 4.5。 不過,Windows 8 不包含 .NET Framework 2.0、3.0 或 3.5,全都使用 CLR 2.0。 因此,相依於CLR 2.0的應用程式預設不會在Windows 8上執行。 相反地,他們會顯示下列對話框,讓用戶能夠安裝 .NET Framework 3.5。 使用者也可以在 [控制面板] 中啟用 .NET Framework 3.5。 這兩個選項都會在 Windows 11、Windows 10、Windows 8.1 和 Windows 8 上安裝 .NET Framework 3.5 一文中討論。
備註
.NET Framework 4.5 會取代用戶計算機上的 .NET Framework 4 (CLR 4)。 因此,.NET Framework 4 應用程式會在 Windows 8 上順暢地執行,而不會顯示此對話方塊。
安裝 .NET Framework 3.5 時,用戶可以在其 Windows 8 計算機上執行相依於 .NET Framework 2.0、3.0 或 3.5 的應用程式。 它們也可以執行 .NET Framework 1.0 和 1.1 應用程式,前提是這些應用程式未明確設定為只在 .NET Framework 1.0 或 1.1 上執行。 請參閱 從 .NET Framework 1.1 移轉。
從 .NET Framework 4.5 開始,公共語言運行庫 (CLR) 的啟用記錄已改善,包含記錄項目,紀錄何時以及為何顯示初始化錯誤訊息。 如需詳細資訊,請參閱 如何:偵錯 CLR 啟用問題。