Megosztás a következőn keresztül:


.NET-keretrendszer inicializálási hibái: A felhasználói élmény kezelése

Megjegyzés:

Ez a cikk a .NET-keretrendszerre vonatkozik. Ez nem vonatkozik a .NET újabb implementációira, beleértve a .NET 6-os és újabb verzióit.

A közös nyelvi futtatókörnyezet (CLR) aktiválási rendszere határozza meg a CLR azon verzióját, amelyet a felügyelt alkalmazáskód futtatásához használunk. Bizonyos esetekben előfordulhat, hogy az aktiválási rendszer nem találja a CLR betöltendő verzióját. Ez a helyzet általában akkor fordul elő, ha egy alkalmazás olyan CLR-verziót igényel, amely érvénytelen vagy nincs telepítve egy adott számítógépen. Ha a kért verzió nem található, a CLR aktiválási rendszere egy HRESULT hibakódot ad vissza a hívott függvényből vagy felületről, és hibaüzenetet jeleníthet meg az alkalmazást futtató felhasználónak. Ez a cikk felsorolja a HRESULT-kódokat, és ismerteti, hogyan akadályozhatja meg a hibaüzenet megjelenítését.

A CLR naplózási infrastruktúrát biztosít a CLR-aktiválási problémák hibakereséséhez a következő útmutatóban leírtak szerint: A CLR aktiválási problémáinak hibakeresése. Ezt az infrastruktúrát nem szabad összekeverni a szerelvénykötési naplókkal, amelyek teljesen eltérőek.

CLR-aktiválási HRESULT-kódok

A CLR aktiválási API-k HRESULT-kódokat adnak vissza az aktiválási művelet eredményének a gazdagépnek való jelentéséhez. A CLR-gazdagépeknek mindig ezeket a visszatérési értékeket kell megtekinteniük, mielőtt további műveleteket hajtanak végre.

  • CLR_E_SHIM_RUNTIMELOAD

  • CLR_E_SHIM_RUNTIMEEXPORT

  • CLR_E_SHIM_INSTALLROOT

  • CLR_E_SHIM_INSTALLCOMP

  • CLR_E_SHIM_LEGACYRUNTIMEALREADYBOUND

  • CLR_E_SHIM_SHUTDOWNINPROGRESS

Inicializálási hibák kezelőfelülete

Ha a CLR-aktiválási rendszer nem tudja betölteni az alkalmazás által igényelt futtatókörnyezet megfelelő verzióját, hibaüzenetet jelenít meg a felhasználóknak, amely tájékoztatja őket arról, hogy a számítógép nincs megfelelően konfigurálva az alkalmazás futtatására, és lehetőséget biztosít számukra a helyzet megoldására. Ebben a helyzetben általában az alábbi hibaüzenet jelenik meg. A felhasználó az Igen lehetőséget választva megnyithat egy Microsoft-webhelyet, ahol letöltheti az alkalmazáshoz megfelelő .NET-keretrendszer-verziót.

.NET-keretrendszer inicializálási hibája párbeszédpanel

Az inicializálási hiba elhárítása

Fejlesztőként számos lehetősége van a .NET-keretrendszer inicializálási hibaüzenetének vezérlésére. Használhat például egy API-jelzőt az üzenet megjelenítésének megakadályozására, ahogyan az a következő szakaszban is szerepel. Azonban továbbra is meg kell oldania azt a problémát, amely miatt az alkalmazás nem tudta betölteni a kért futtatókörnyezetet. Ellenkező esetben előfordulhat, hogy az alkalmazás egyáltalán nem fut, vagy egyes funkciók nem érhetők el.

Az alapul szolgáló problémák megoldásához és a legjobb felhasználói élmény biztosításához (kevesebb hibaüzenet) a következőket javasoljuk:

  • .NET-keretrendszer 3.5-ös (és korábbi) alkalmazások esetén: Konfigurálja az alkalmazást a .NET-keretrendszer 4-ös vagy újabb verzióinak támogatásához (lásd az utasításokat).

  • .NET Framework 4-alkalmazások esetén: Telepítse a .NET Framework 4 terjeszthető csomagot az alkalmazásbeállítás részeként. Lásd: Üzembe helyezési útmutató fejlesztőknek.

A hibaüzenet szabályozása

Ha hibaüzenetet jelenít meg arról, hogy a kért .NET-keretrendszer verziója nem található, hasznos szolgáltatásként vagy kisebb bosszúságként tekinthető meg a felhasználók számára. Mindkét esetben vezérelheti ezt a felhasználói felületet úgy, hogy jelölőket ad át az aktiválási API-knak.

Az ICLRMetaHostPolicy::GetRequestedRuntime metódus bemenetként elfogad egy METAHOST_POLICY_FLAGS enumerálási tagot. Ha a CLR kért verziója nem található, a METAHOST_POLICY_SHOW_ERROR_DIALOG jelzőt is hozzáadhatja a hibaüzenet kéréséhez. Alapértelmezés szerint a hibaüzenet nem jelenik meg. (Az ICLRMetaHost::GetRuntime metódus nem fogadja el ezt a jelzőt, és nem biztosít más módot a hibaüzenet megjelenítésére.)

A Windows egy SetErrorMode függvényt biztosít, amellyel deklarálhatja, hogy a hibaüzenetek a folyamaton belül futó kód eredményeként jelenjenek-e meg. Megadhatja a SEM_FAILCRITICALERRORS jelzőt, hogy megakadályozza a hibaüzenet megjelenítését.

Bizonyos esetekben azonban fontos felülbírálni az alkalmazásfolyamat által beállított SEM_FAILCRITICALERRORS beállítást. Ha például rendelkezik egy natív COM-összetevővel, amely a CLR-t üzemelteti, és amely egy olyan folyamatban fut, amelyben SEM_FAILCRITICALERRORS van beállítva, érdemes lehet felülbírálni a jelzőt attól függően, hogy milyen hatással van a hibaüzenetek megjelenítése az adott alkalmazásfolyamaton belül. Ebben az esetben az alábbi jelölők egyikével bírálhatja felül a SEM_FAILCRITICALERRORS:

A CLR által biztosított gazdagépekhez tartozó UI-k szabályzata

A CLR számos kiszolgálót tartalmaz különféle forgatókönyvekhez, és ezek a kiszolgálók hibaüzenetet jelenítenek meg, amikor problémát észlelnek a futtatókörnyezet szükséges verziójának betöltésekor. Az alábbi táblázat felsorolja a szervereket és azok hibaüzenet-kezeléseit.

CLR-gazdagép Leírás Hibaüzenet-szabályzat Le lehet tiltani a hibaüzenetet?
Felügyelt EXE-kiszolgáló Elindítja a felügyelt EXE-eket. Hiányzó .NET-keretrendszer-verzió esetén jelenik meg Nem
Felügyelt COM-gazdagép Felügyelt COM-összetevők betöltése egy folyamatba. Hiányzó .NET-keretrendszer-verzió esetén jelenik meg Igen, a SEM_FAILCRITICALERRORS jelző beállításával
ClickOnce hosztgép Elindítja a ClickOnce-alkalmazásokat. A .NET-keretrendszer hiányzó verziója esetén jelenik meg, a .NET-keretrendszer 4.5-ös verziójától kezdve Nem
XBAP-gazdagép WPF XBAP-alkalmazásokat indít el. A .NET-keretrendszer hiányzó verziója esetén jelenik meg, a .NET-keretrendszer 4.5-ös verziójától kezdve Nem

A Windows 8 működése és felhasználói felülete

A CLR aktiválási rendszer ugyanazt a viselkedést és felhasználói felületet biztosítja a Windows 8 rendszeren, mint a Windows operációs rendszer más verzióiban, kivéve, ha problémákat tapasztal a CLR 2.0 betöltésekor. A Windows 8 tartalmazza a .NET Framework 4.5-öt, amely a CLR 4.5-öt használja. A Windows 8 azonban nem tartalmazza a .NET-keretrendszer 2.0-s, 3.0-s vagy 3.5-ös verzióját, amelyek mindegyike a CLR 2.0-t használja. Ennek eredményeképpen a CLR 2.0-ra támaszkodó alkalmazások alapértelmezés szerint nem futnak Windows 8 rendszeren. Ehelyett az alábbi párbeszédpanelt jelenítik meg, amely lehetővé teszi a felhasználók számára a .NET-keretrendszer 3.5 telepítését. A felhasználók a Vezérlőpulton is engedélyezhetik a .NET-keretrendszer 3.5-öt. Mindkét lehetőséget a .NET-keretrendszer 3.5 telepítése Windows 11, Windows 10, Windows 8.1 és Windows 8 rendszereken című cikk ismerteti.

A 3.5-ös telepítés párbeszédpanelje Windows 8 rendszeren

Megjegyzés:

A .NET-keretrendszer 4.5 a felhasználó számítógépén található .NET-keretrendszer 4 (CLR 4) helyére lép. Ezért a .NET Framework 4-alkalmazások zökkenőmentesen, a párbeszédpanel megjelenítése nélkül futnak a Windows 8-on.

A .NET-keretrendszer 3.5 telepítésekor a felhasználók a .NET-keretrendszer 2.0-s, 3.0-s vagy 3.5-ös verziójától függő alkalmazásokat futtathatnak Windows 8 rendszerű számítógépükön. A .NET-keretrendszer 1.0- és 1.1-alkalmazásokat is futtathatnak, feltéve, hogy ezek az alkalmazások nincsenek explicit módon konfigurálva, hogy csak a .NET-keretrendszer 1.0-s vagy 1.1-s verzióján fussanak. Lásd: Migrálás a .NET-keretrendszer 1.1-ből.

A .NET-keretrendszer 4.5-ös verziótól kezdve a CLR aktiválási naplózása javult, és olyan naplóbejegyzéseket tartalmaz, amelyek rögzítik, hogy mikor és miért jelenik meg az inicializálási hibaüzenet. További információ : A CLR aktiválási problémáinak hibakeresése.

Lásd még