Jak naprawić awarię aplikacji .NET dla systemu Windows podczas uruchamiania za pomocą kodu wyjątku: 0xE0434352?

81

Zbudowałem aplikację .NET Windows Forms w Visual Studio 2010. Zbudowałem również odpowiedni pakiet instalacyjny / instalacyjny za pośrednictwem Visual Studio 2010. Jest to aplikacja 32-bitowa (x86). (Korzystamy z formantów Windows Forms innych firm, które są tylko 32-bitowe).

Jestem w stanie uruchomić pakiet instalacyjny i pomyślnie wdrożyć go w innych 64-bitowych środowiskach Windows 7 i 32-bitowych Windows XP. Zainstalowana aplikacja działa na nich dobrze.

Jednak przy próbie uruchomienia 64-bitowego systemu Windows Server 2008 R2 aplikacja ulega awarii podczas uruchamiania. Został pomyślnie zainstalowany za pomocą instalatora bez żadnych błędów.

Wygląda na to, że ulega awarii podczas ładowania aplikacji. Umieściłem okno komunikatu jako pierwszy wiersz w aplikacji, aby sprawdzić, czy minęło ładowanie. Okno komunikatu nie pojawia się, więc zakładam, że występuje podczas ładowania / inicjowania aplikacji.

Jak dotąd nie znalazłem wiele do zrobienia. Ze szczegółów widzę, co następuje:

Exception Code: E0434352

Poszperałem w pobliżu / przeszukałem google, aby sprawdzić, czy jest coś oczywistego, ale nic nie widziałem. Widziałem odniesienia do możliwego przepełnienia stosu w CLR .

Aplikacja Windows Forms jest zbudowana przy użyciu następujących odwołań:

  • DevExpress
  • Kontrole Infragistics Winforms
  • Biblioteka DLL ORACLE DataAccess
  • RabbitMQ

Jaki jest problem? Jak podejść do rozwiązania tego problemu? Jak debugować, aby uzyskać bardziej przydatne informacje?

JohnB
źródło
Które z tych odniesień używa niezarządzanego kodu? Uruchom WinDbg, załaduj aplikację i sprawdź, czy są wyświetlane jakiekolwiek informacje o błędzie.
keyboardP
Również prawdopodobnie powiązany, jeśli okaże się, że jest to moduł ORACLE: stackoverflow.com/questions/2100955/ ...
keyboardP
3
MessageBox? Poważny? Rzuć okiem na System.Diagnostics.Debug.
Henk Holterman
Debugger.Launch () wyświetli monit o dołączenie procesu do debugera programu Visual Studio, gdy uruchomi on tę linię, więc możesz to zrobić w pobliżu punktu wejścia, aby dołączyć procesy na początku.
Polubowne
1
Minęło trochę czasu, ale - Czy udało Ci się rozwiązać problem? Mam klienta, który zgłasza takie zachowanie. Trudno tutaj odtworzyć na rozwijającej się maszynie. Zapraszam do dzielenia się swoim rozwiązaniem - myślę, że warto je głosować. Dziękuję Ci!
deafjeff

Odpowiedzi:

71

0xE0434352 to kod wyjątku dla wszystkich wyjątków .NET, więc niewiele Ci to powie. Skąd masz ten kod wyjątku? Dziennik zdarzeń?

Najlepszym rozwiązaniem jest użycie debugera, aby uzyskać więcej informacji. Jeśli debuger programu Visual Studio nie pomoże, może być konieczne wyewidencjonowanie WinDbg z SOS . Zobacz tutaj i tutaj, aby uzyskać wprowadzenie. Niech przerwie wyjątek i zobacz, czy możesz uzyskać więcej informacji na temat przyczyny.

Jeśli podejrzewasz, że jest to problem podczas ładowania zestawów, możesz sprawdzić dziennik Fusion .

Lars Truijens
źródło
4
przed wypróbowaniem debuggerów sprawdź odpowiedź
Tergivera
82

Jeśli otrzymujesz ten błąd z Podglądu zdarzeń, powinieneś zobaczyć inne zdarzenie błędu (przynajmniej jedno) ze źródła „.NET Runtime”. Spójrz na ten komunikat o błędzie, ponieważ będzie zawierał Exceptioninformacje.

Tergiver
źródło
5
To naprawdę mi pomogło, dziękuję, dlatego stwierdziłem, że brakuje mi jednej z zależności (wyjątek FileNotFound)
Pavel K
4

Nie jestem pewien, czy to komukolwiek pomoże, czy nie, ale ponieważ to był mój problem, to chyba warto wspomnieć:

Otrzymałem ten błąd i okazało się, że jest to problem z platformą, dla której zbudowano plik EXE. Musieliśmy go zbudować dla x86 i musiał być x64, ze względu na odniesienie do Oracle w projekcie. Kiedy wprowadziliśmy tę zmianę, problem zniknął. Zobacz więc, czy masz podobne konflikty.

Jan
źródło
4

Wygląda na to, że ten błąd 0xe0434352 dotyczy wielu różnych błędów.

Na wypadek, gdyby to komukolwiek pomogło, napotkałem ten błąd, gdy próbowałem zainstalować moją aplikację na nowej instalacji systemu Windows 10. Działało na innych maszynach i wyglądało na to, że aplikacja na chwilę uruchamia się, zanim umrze. Po wielu próbach i błędach okazało się, że aplikacja wymaga DirectX9. Chociaż była obecna późniejsza wersja DirectX, musiała mieć wersję 9. Mam nadzieję, że to oszczędza komuś pewnej frustracji.

Mike Kelly
źródło
To bardzo osobliwy przypadek. Nie jestem pewien, ilu stanie w obliczu tej konkretnej sytuacji.
Eniola
3

Walczyłem z tym przez cały dzień, prosząc moich użytkowników o uruchomienie wersji debugowania oprogramowania. Ponieważ wyglądało na to, że nie uruchomił pierwszej linii. Tylko awaria bez informacji.

Potem zdałem sobie sprawę, że błąd był wewnątrz InitializeComponent formularza.

Sposobem na uzyskanie wyjątku było usunięcie tej linii (lub skomentowanie jej):

System.Diagnostics.DebuggerStepThrough()

Gdy pozbędziesz się tej linii, otrzymasz normalny wyjątek.

Gabriel Fernandez
źródło
2

Otrzymywałem to po wdrożeniu aplikacji. W moim przypadku wybrałem opcję „To jest aplikacja o pełnym zaufaniu” na karcie zabezpieczeń projektu i to naprawiło problem.

Joel
źródło
3
To prawdopodobnie nie jest prawdziwa poprawka: możesz skonfigurować aplikację / jej wymagania dotyczące bezpieczeństwa, aby działała poprawnie w środowisku o średnim zaufaniu. Ale to przydatny punkt wyjścia - dzięki!
Rup
1

Kwestia:

Kod aplikacji .Net przerywa pracę przed rozpoczęciem wykonywania [aplikacja konsoli lub aplikacja Windows]

Otrzymany błąd: przerwano z kodem błędu „E0434352”

Wyjątek : nieznany wyjątek

Scenariusz 1:

Gdy aplikacja jest już uruchomiona, która wykorzystała niektóre z zasobów zależnych i te zasoby są nadal używane z wykonywaną aplikacją, gdy inna aplikacja lub ten sam plik exe jest wyzwalany z innego źródła, wówczas jedna z aplikacji zgłasza błąd

Scenariusz 2:

Gdy aplikacja jest uruchamiana przez harmonogram lub zadania automatyczne, może znajdować się w stanie wykonywania w tle, a tymczasem podczas ponownej próby uruchomienia tej samej aplikacji może zostać wyzwolony błąd.

Rozwiązanie:

Utwórz aplikację, kiedy i gdzie aplikacja zwalnia wszystkie swoje zasoby zaraz po zakończeniu. Po zamknięciu aplikacji zakończ wszystkie procesy w tle. Sprawdź i unikaj wykonywania aplikacji z wielu źródeł, takich jak proces wsadowy, harmonogram zadań i narzędzia zewnętrzne w tym samym czasie. Sprawdź zależności aplikacji i zasobów i wyczyść kod, jeśli to konieczne.

BHUVANESH MOHANKUMAR
źródło
W moim przypadku folder aplikacji lub pliki w nim były zablokowane / otwarte - ponieważ system nie pozwolił na zmianę jego nazwy (prosty test do sprawdzenia czy folder i podfoldery są wolne lub otwarte / zablokowane). Po ponownym wylogowaniu / zalogowaniu się na serwerze zwalnia blokady
Kuleris
0

Aby rozwiązać ten problem (ponieważ wiele aplikacji zaczęło nagle zgłaszać ten wyjątek, na przykład CorelDraw X6), odinstalowałem środowisko uruchomieniowe .NET 4.5 i zainstalowałem środowisko uruchomieniowe .NET 4. Obie wersje nie mogą być instalowane obok siebie, ale używają tych samych numerów wersji w GAC . Powoduje to problemy, ponieważ niektóre funkcje zostały amortyzowane w wersji 4.5.

DLL Hell powrócił ...

user857629
źródło
0

Więc .. Zauważyłem w przeglądarce zdarzeń, że ta awaria odpowiadała błędowi „System.IO.FileNotFoundException”.

Uruchomiłem więc ProcMon i zauważyłem, że jedna z bibliotek dll programu nie ładowała vcruntime140. Po prostu zainstalowałem redistę vs15 i zadziałało.

mirh
źródło
0

Otrzymaliśmy ten błąd, gdy parametry połączenia z naszą bazą danych były nieprawidłowe. Kluczem do rozwiązania tego problemu było uruchomienie dotnet blah.dll, który dostarczył ślad stosu pokazujący, że nie można znaleźć określonej instancji serwera sql. Mam nadzieję, że to komuś pomoże.

dellyjm
źródło
0

Wiem, że to dość stary wątek, ale miałem też ten problem z tworzoną aplikacją ac # / WPF. Aplikacja działała dobrze na komputerze deweloperskim, ale nie uruchamiała się na komputerze testowym. Dziennik aplikacji w Podglądzie zdarzeń podał nieco mglisty błąd .NET Runtime System.IO.DirectoryNotFoundException.

Próbowałem użyć oprogramowania do debugowania, ale aplikacja nie działała wystarczająco długo, aby dołączyć debuger do procesu. Po całodziennym uderzeniu głową w biurko i przejrzeniu wielu stron internetowych, takich jak ta, postanowiłem rozwiązać ten problem, aby zainstalować VS2019 na mojej maszynie testowej. Następnie przeciągnąłem plik .exe z jego folderu (znajdował się on głęboko w folderze Users [użytkownik] \ AppData \ Apps \ 2.0 ...) do otwartej instancji VS2019 i zacząłem go stamtąd uruchomić. Natychmiast pojawiło się okno dialogowe zawierające wyjątek i przyczynę.

W moim przypadku, gdy dodałem ikonę do jednego z formularzy, pełna ścieżka do ikony została umieszczona w XAML zamiast tylko nazwy ikony. Skopiowałem plik ikony do folderu projektu, ale ponieważ folder projektu nie istnieje na maszynie testowej, była to główna przyczyna błędu. Następnie usunąłem ścieżkę z XAML, pozostawiając tylko nazwę ikony, przebudowałem rozwiązanie i ponownie je opublikowałem, a teraz działało dobrze na maszynie testowej. Oczywiście istnieje wiele przyczyn oprócz tego, co spowodowało błąd, ale ta metoda rozwiązywania problemów powinna, miejmy nadzieję, zidentyfikować główną przyczynę błędu, ponieważ przeglądarka zdarzeń systemu Windows daje nieco niejasną odpowiedź.

Podsumowując, użyj programu Visual Studio na maszynie testowej jako pewnego rodzaju debugera. Aby jednak działało poprawnie, musiałem przeciągnąć plik .exe do IDE i uruchomić (uruchomić) go stamtąd. Wierzę, że to zadziała również z VS2017 i VS2019. Mam nadzieję, że pomoże to komuś, kto nadal ma ten problem.

Craig Prusansky
źródło