SORU
3 AĞUSTOS 2013, CUMARTESİ


Neden Ortamı yok.() Çıkış programı artık sonlandırmak değil mi?

Bu sadece bir kaç gün önce, sadece this question makinama sınırlı olmadığını teyit aldım keşfettiğim bir şey.

Bu yeniden oluşturma için en kolay yolu Win bir uygulama başlangıç, bir düğme ekleyin ve bu kodu yazın:

    private void button1_Click(object sender, EventArgs e) {
        MessageBox.Show("yada");
        Environment.Exit(1);         // Kaboom!
    }

Programı başarısız olursonraExit() deyimi yürütür. Olsun Win "Hata oluşturma pencere kolu".

Yönetilmeyen hata ayıklama etkinleştirme neler biraz açıkça ortaya koyuyor. COM kalıcı döngü ve WM_PAINT ileti teslim edilmesini sağlar yürütülüyor. Bu bertaraf formu önemli.

Şimdiye kadar bulduğum tek gerçek var:

  • Sadece hata ile çalışan sınırlı değil. Bu da bir başarısız. Oldukça kötü yanı, WER kaza iletişim gösteririki kez.
  • İşlemi bit ile bir alakası yok, wow64 katmanı oldukça kötü bir ünü var ama bir AnyCPU çöküyor aynı şekilde inşa etmek.
  • İle bir ilgisi yok .NET sürüm, 4.5 ve 3.5 kazasında aynı şekilde.
  • Çıkış kodu önemli değil.
  • Arama İş Parçacığı.() Uyku Çıkış çağırmadan önce() düzeltmiyor.
  • Bu 7 aynı şekilde etkilenmiş görünmüyor Windows 8 64-bit sürümü olacak.
  • Bu nispeten yeni bir davranış olmalıdır, bunu daha önce görmedim. Güncelleme tarihi makinem artık doğru değil gerçi bu konuyla ilgili hiçbir güncelleştirmeleri Windows Update üzerinden teslim eder.
  • Bu fena halde kıran bir davranış, bir olay, bu gibi bir kod yazarsınız Uygulama işleyicisi.UnhandledException ve aynı şekilde çöküyor.

Muhtemelen bu kaza önlemek için ne yapabileceğini özellikle ilgimi çekti. Özellikle Uygulama.UnhandledException senaryo bana bir sonlandırmak için pek çok yolu vardır kütükleri .NET programı. Uygulama demeyi unutmayın lütfen.() Çıkış veya Form.() Yakın geçici çözümler değil yani UnhandledException için bir olay işleyicisi geçerli değildir.


GÜNCELLEME: Mehrdad sonlandırıcı iş parçacığı sorunun bir parçası olabilir dikkat çekti. Bu, aynı zamanda CLR sonlandırıcı iş parçacığı yürütme bitirmek için vermek 2 saniye zaman aşımı için bazı kanıtlar görmeyi düşünüyorum.

Sonlandırıcı Point içinde.() ForceExitMessageLoop. Bir İsWindow var() kabaca kodu ile konum karşılık gelen winapi fonksiyonu var, 32-bit modunda makine kodu bakıldığında 0x3c ofset. Bu İsWindow görünüyor() deadlocking. Yapamam iyi bir iç izleme ancak yığın olsun, hata ayıklayıcı pınvoke Ara döndü düşünüyor. Bunu açıklaması çok zor. Eğer daha iyi bir yığın izleme alabilir, o zaman bunu görmek isterim. Benimki:

System.Windows.Forms.dll!System.Windows.Forms.NativeWindow.ForceExitMessageLoop()   0x3c bytes  
System.Windows.Forms.dll!System.Windows.Forms.NativeWindow.Finalize()   0x16 bytes  
[Native to Managed Transition]  
kernel32.dll!@BaseThreadInitThunk@12()    0xe bytes 
ntdll.dll!___RtlUserThreadStart@8()    0x27 bytes   
ntdll.dll!__RtlUserThreadStart@8()    0x1b bytes

Hiçbir şey ForceExitMessageLoop çağrısı üzerine, yönetilmeyen hata ayıklayıcı etkin.

CEVAP
17 AĞUSTOS 2013, CUMARTESİ


Bu sorun hakkında Microsoft ile görüştüm ve o ödenir gibi görünüyordu. Yaptığını düşünmek istiyorum:) en azından. Kararda, onay onlardan geri almadım, Windows grup doğrudan irtibat zordur ve bir aracı kullanmak zorunda kaldım.

Güncelleştirme, Windows Update aracılığıyla teslim sorunu çözüldü. Çarpışma artık yok, şiddetle İsWindow düşündüren önce fark 2 saniye gecikme() kilitlenme çözüldü. Ve programın temiz ve güvenilir bir şekilde kapatır. Güncelleştirme, Windows, wdboot.sys, wdfilter.sys, tcpip.sys, rpcrt4.dll, uxtheme.dll, crypt32.dll ve wintrust.dll Defans için yamalar yüklü

Uxtheme.dll Garip ördek, Görsel Stilleri apı tema uygular ve bu test programı tarafından kullanılır. Emin olamıyorum ama paramı sorunun kaynağı olarak bu. C:\windows\system32 kopya sürüm 6.2.9200.16660 Ağustos tarihinde oluşturulan, 2013 14 benim makinede numarası vardır.

Dava kapandı.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • DominicFear

    DominicFear

    30 Kasım 2006
  • Press Start

    Press Start

    4 HAZİRAN 2006
  • THE RED DRAGON

    THE RED DRAG

    6 ŞUBAT 2009