Aracılığıyla paylaş


.NET Framework başlatma hataları: Kullanıcı deneyimini yönetme

Ortak dil çalışma zamanı (CLR) etkinleştirme sistemi, yönetilen uygulama kodunu çalıştırmak için kullanılacak CLR sürümünü belirler. Bazı durumlarda, etkinleştirme sistemi yüklenecek CLR sürümünü bulamayabilir. Bu durum genellikle bir uygulama geçersiz olan veya belirli bir bilgisayarda yüklü olmayan bir CLR sürümü gerektirdiğinde oluşur. İstenen sürüm bulunamazsa, CLR etkinleştirme sistemi çağrılan işlev veya arabirimden bir HRESULT hata kodu döndürür ve uygulamayı çalıştıran kullanıcıya bir hata iletisi görüntüleyebilir. Bu makalede HRESULT kodlarının listesi sağlanır ve hata iletisinin görüntülenmesini nasıl önleyebileceğiniz açıklanır.

CLR, NASıL yapılır: CLR Etkinleştirme Sorunlarını Ayıklama bölümünde açıklandığı gibi CLR etkinleştirme sorunlarını ayıklamanıza yardımcı olacak günlük altyapısı sağlar. Bu altyapı tamamen farklı olan derleme bağlama günlükleriyle karıştırılmamalıdır.

CLR etkinleştirme HRESULT kodları

CLR etkinleştirme API'leri, bir etkinleştirme işleminin sonucunu bir konağa bildirmek için HRESULT kodları döndürür. CLR konakları, ek işlemlere devam etmeden önce her zaman bu dönüş değerlerine başvurmalıdır.

  • CLR_E_SHIM_RUNTIMELOAD

  • CLR_E_SHIM_RUNTIMEEXPORT

  • CLR_E_SHIM_INSTALLROOT

  • CLR_E_SHIM_INSTALLCOMP

  • CLR_E_SHIM_LEGACYRUNTIMEALREADYBOUND

  • CLR_E_SHIM_SHUTDOWNINPROGRESS

Başlatma hataları için kullanıcı arabirimi

CLR etkinleştirme sistemi bir uygulamanın gerektirdiği çalışma zamanının doğru sürümünü yükleyemiyorsa, kullanıcılara bilgisayarlarının uygulamayı çalıştıracak şekilde düzgün yapılandırılmadığını bildiren bir hata iletisi görüntüler ve onlara durumu düzeltme fırsatı sunar. Bu durumda genellikle aşağıdaki hata iletisi gösterilir. Kullanıcı, uygulama için doğru .NET Framework sürümünü indirebileceği bir Microsoft web sitesine gitmek için Evet'i seçebilir.

.NET Framework Initialization Error dialog box

Başlatma hatasını çözme

Geliştirici olarak, .NET Framework başlatma hata iletisini denetlemek için çeşitli seçenekleriniz vardır. Örneğin, sonraki bölümde açıklandığı gibi iletinin görüntülenmesini önlemek için bir API bayrağı kullanabilirsiniz. Ancak yine de uygulamanızın istenen çalışma zamanını yüklemesini engelleyen sorunu çözmeniz gerekir. Aksi takdirde, uygulamanız hiç çalışmayabilir veya bazı işlevler kullanılamayabilir.

Temel alınan sorunları çözmek ve en iyi kullanıcı deneyimini (daha az hata iletisi) sağlamak için aşağıdakileri öneririz:

  • .NET Framework 3.5 (ve önceki sürümler) uygulamaları için: Uygulamanızı .NET Framework 4 veya sonraki sürümlerini destekleyecek şekilde yapılandırın (yönergelere bakın).

  • .NET Framework 4 uygulamaları için: Uygulama kurulumunuzun bir parçası olarak .NET Framework 4 yeniden dağıtılabilir paketini yükleyin. Bkz. Geliştiriciler için Dağıtım Kılavuzu.

Hata iletisini denetleme

İstenen .NET Framework sürümünün bulunamadığını bildirmek için bir hata iletisi görüntülenmesi, kullanıcılar için yararlı bir hizmet veya küçük bir rahatsızlık olarak görüntülenebilir. Her iki durumda da, etkinleştirme API'lerine bayraklar geçirerek bu kullanıcı arabirimini denetleyebilirsiniz.

ICLRMetaHostPolicy::GetRequestedRuntime yöntemi giriş olarak bir METAHOST_POLICY_FLAGS numaralandırma üyesi kabul eder. İstenen CLR sürümü bulunamazsa hata iletisi istemek için METAHOST_POLICY_SHOW_ERROR_DIALOG bayrağını ekleyebilirsiniz. Varsayılan olarak, hata iletisi görüntülenmez. (ICLRMetaHost::GetRuntime yöntemi bu bayrağı kabul etmez ve hata iletisini görüntülemek için başka bir yol sağlamaz.)

Windows, işleminizde çalışan kodun bir sonucu olarak hata iletilerinin gösterilmesini isteyip istemediğinizi bildirmek için kullanabileceğiniz bir SetErrorMode işlevi sağlar. Hata iletisinin görüntülenmesini önlemek için SEM_FAILCRITICALERRORS bayrağını belirtebilirsiniz.

Ancak bazı senaryolarda, bir uygulama işlemi tarafından ayarlanan SEM_FAILCRITICALERRORS ayarını geçersiz kılmak önemlidir. Örneğin, CLR'yi barındıran ve SEM_FAILCRITICALERRORS ayarlandığı bir işlemde barındırılan yerel bir COM bileşeniniz varsa, bu uygulama işlemi içindeki hata iletilerini görüntülemenin etkisine bağlı olarak bayrağı geçersiz kılmak isteyebilirsiniz. Bu durumda, SEM_FAILCRITICALERRORS geçersiz kılmak için aşağıdaki bayraklardan birini kullanabilirsiniz:

  • ICLRMetaHostPolicy::GetRequestedRuntime yöntemiyle METAHOST_POLICY_IGNORE_ERROR_MODE kullanın.

  • GetRequestedRuntimeInfo işleviyle RUNTIME_INFO_IGNORE_ERROR_MODE kullanın.

CLR tarafından sağlanan konaklar için kullanıcı arabirimi ilkesi

CLR, çeşitli senaryolar için bir konak kümesi içerir ve bu konakların tümü, çalışma zamanının gerekli sürümünü yüklerken sorunlarla karşılaştıklarında bir hata iletisi görüntüler. Aşağıdaki tabloda konakların ve hata iletisi ilkelerinin listesi sağlanır.

CLR konağı Açıklama Hata iletisi ilkesi Hata iletisi devre dışı bırakılabilir mi?
Yönetilen EXE konağı Yönetilen EXE'leri başlatır. Eksik bir .NET Framework sürümü olması durumunda gösterilir Hayır
Yönetilen COM konağı Yönetilen COM bileşenlerini bir işleme yükler. Eksik bir .NET Framework sürümü olması durumunda gösterilir Evet, SEM_FAILCRITICALERRORS bayrağını ayarlayarak
ClickOnce konağı ClickOnce uygulamalarını başlatır. .NET Framework 4.5 ile başlayarak eksik bir .NET Framework sürümü olması durumunda gösterilir Hayır
XBAP konağı WPF XBAP uygulamalarını başlatır. .NET Framework 4.5 ile başlayarak eksik bir .NET Framework sürümü olması durumunda gösterilir Hayır

Windows 8 davranışı ve kullanıcı arabirimi

CLR etkinleştirme sistemi, CLR 2.0'ı yüklerken sorunlarla karşılaşması dışında, Windows 8'de windows işletim sisteminin diğer sürümlerinde olduğu gibi aynı davranışı ve kullanıcı arabirimini sağlar. Windows 8, CLR 4.5 kullanan .NET Framework 4.5'i içerir. Ancak Windows 8,clr 2.0 kullanan .NET Framework 2.0, 3.0 veya 3.5 içermez. Sonuç olarak, CLR 2.0'a bağımlı uygulamalar varsayılan olarak Windows 8'de çalışmaz. Bunun yerine, kullanıcıların .NET Framework 3.5 yüklemesini sağlamak için aşağıdaki iletişim kutusunu görüntüler. Kullanıcılar Denetim Masası'de .NET Framework 3.5'i de etkinleştirebilir. Her iki seçenek de Windows 11, Windows 10, Windows 8.1 ve Windows 8'e .NET Framework 3.5 yükleme makalesinde açıklanmaktadır.

Dialog box for 3.5 install on Windows 8

Not

.NET Framework 4.5, kullanıcının bilgisayarındaki .NET Framework 4'ün (CLR 4) yerini alır. Bu nedenle, .NET Framework 4 uygulamaları Windows 8'de bu iletişim kutusunu görüntülemeden sorunsuz bir şekilde çalışır.

.NET Framework 3.5 yüklendiğinde, kullanıcılar Windows 8 bilgisayarlarında .NET Framework 2.0, 3.0 veya 3.5'e bağlı uygulamaları çalıştırabilir. Bu uygulamalar açıkça yalnızca .NET Framework 1.0 veya 1.1 üzerinde çalışacak şekilde yapılandırılmamışsa . NET Framework 1.0 ve 1.1 uygulamalarını da çalıştırabilir. Bkz . .NET Framework 1.1'den geçiş.

.NET Framework 4.5'den başlayarak CLR etkinleştirme günlüğü, başlatma hata iletisinin ne zaman ve neden görüntülendiğini kaydeden günlük girdilerini içerecek şekilde geliştirilmiştir. Daha fazla bilgi için bkz . Nasıl yapılır: CLR Etkinleştirme Sorunlarını Ayıklama.

Ayrıca bkz.