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?
źródło
WinDbg
, załaduj aplikację i sprawdź, czy są wyświetlane jakiekolwiek informacje o błędzie.Odpowiedzi:
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 .
źródło
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ł
Exception
informacje.źródło
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.
źródło
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.
źródło
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):
Gdy pozbędziesz się tej linii, otrzymasz normalny wyjątek.
źródło
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.
źródło
Kod aplikacji .Net przerywa pracę przed rozpoczęciem wykonywania [aplikacja konsoli lub aplikacja Windows]
Wyjątek : nieznany wyjątek
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
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.
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.
źródło
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ł ...
źródło
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.
źródło
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.
źródło
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.
źródło