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

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_RUNTIM Enterprise kiadás XPORT

  • CLR_E_SHIM_INSTALLROOT

  • CLR_E_SHIM_INSTALLCOMP

  • CLR_E_SHIM_LEGACYRUNTIMEALREADYBOUND

  • CLR_E_SHIM_SHUTDOWNINPROGRESS

Felhasználói felület inicializálási hibákhoz

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ás megfelelő .NET-keretrendszer verzióját.

.NET Framework Initialization Error dialog box

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 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 vagy újabb verzióinak támogatásához (lásd az utasításokat).

  • .NET-keretrendszer 4 alkalmazás esetén: Telepítse a .NET-keretrendszer 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ó 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. (A ICLRMetaHost::A 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 Standard kiadás M_FAILCRITICALERRORS jelzőt, hogy a hibaüzenet ne jelenjen meg.

Bizonyos esetekben azonban fontos felülírni az alkalmazásfolyamat által beállított Standard kiadás M_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 Standard kiadás M_FAILCRITICALERRORS van beállítva, akkor é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 jelzők egyikével bírálhatja felül a Standard kiadás M_FAILCRITICALERRORS:

A CLR által biztosított gazdagépek felhasználói felületi szabályzata

A CLR számos gazdagépet tartalmaz különböző forgatókönyvekhez, és ezek a gazdagépek hibaüzenetet jelenítenek meg, amikor problémákba ütköznek a futtatókörnyezet szükséges verziójának betöltésekor. Az alábbi táblázat felsorolja a gazdagépeket és azok hibaüzenet-szabályzatait.

CLR-gazdagép Leírás Hibaüzenet-szabályzat Le lehet tiltani a hibaüzenetet?
Felügyelt EXE-gazdagép Elindítja a felügyelt EXE-eket. Hiányzó .NET-keretrendszer verzió esetén jelenik meg Nem
Felügyelt COM-gazdagép A felügyelt COM-összetevők betöltése folyamatba. Hiányzó .NET-keretrendszer verzió esetén jelenik meg Igen, a Standard kiadás M_FAILCRITICALERRORS jelző beállításával
ClickOnce gazdagép Elindítja a ClickOnce-alkalmazásokat. Hiányzó .NET-keretrendszer verzió esetén jelenik meg, kezdve a .NET-keretrendszer 4.5-ös verziójával Nem
XBAP-gazdagép WPF XBAP-alkalmazásokat indít el. Hiányzó .NET-keretrendszer verzió esetén jelenik meg, kezdve a .NET-keretrendszer 4.5-ös verziójával 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 .NET-keretrendszer 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ó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 a következő 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 .NET-keretrendszer 3.5-öt is engedélyezhetik Vezérlőpult. Mindkét lehetőségről a .NET-keretrendszer 3.5 telepítése Windows 11, Windows 10, Windows 8.1 és Windows 8 rendszereken című cikkben talál.

Dialog box for 3.5 install on Windows 8

Feljegyzés

A .NET-keretrendszer 4.5 lecseréli a .NET-keretrendszer 4-et (CLR 4) a felhasználó számítógépén. Ezért .NET-keretrendszer 4 alkalmazás zökkenőmentesen, a párbeszédpanel megjelenítése nélkül fut Windows 8-on.

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

A 4.5-ös .NET-keretrendszer kezdve a CLR aktiválási naplózása javult, így olyan naplóbejegyzések is megjelentek, 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