Як виправити збій програми .NET Windows під час запуску за допомогою коду винятку: 0xE0434352?


81

Я створив програму .NET Windows Forms у Visual Studio 2010. Я також створив відповідний пакет встановлення / встановлення через Visual Studio 2010. Він побудований як 32-розрядна програма (x86). (Ми використовуємо сторонні елементи керування Windows Forms, які є лише 32-розрядними).

Я можу запустити інсталяційний пакет та успішно розгорнути його в інших 64-розрядних середовищах Windows 7 та 32-розрядних ящиках Windows XP. На них встановлена ​​програма працює нормально.

Однак, коли я намагаюся запустити Windows Server 2008 R2 - 64-біт, програма аварійно завершує роботу під час запуску. Він успішно встановився через інсталятор без помилок.

Здається, він аварійно завершує роботу під час завантаження програми. Я поставив вікно повідомлення як перший рядок у програмі, щоб перевірити, чи не минуло завантаження. Поле повідомлення не відображається, тому я припускаю, що це відбувається під час завантаження / запуску програми.

Поки що я не знайшов багато чого продовжувати. З подробиць я бачу наступне:

Exception Code: E0434352

Я рибалив / гуглив, щоб побачити, чи є щось очевидне, але нічого не бачив. Я бачив деякі посилання на можливе переповнення стека в CLR .

Додаток Windows Forms побудовано з такими посиланнями:

  • DevExpress
  • Інфрагристика Winforms управління
  • Бібліотека даних ORACLE DataAccess
  • RabbitMQ

У чому проблема? Як я можу підійти до цього? Як налагодити, щоб отримати більше корисної інформації?


Яке з цих посилань використовує некерований код? Запустіть WinDbg, завантажте програму та перевірте, чи виведена інформація про помилку.
клавіатура

Також, можливо, пов’язане, якщо виявиться, що це модуль ORACLE: stackoverflow.com/questions/2100955/…
клавіатураP

3
Повідомлення? Серйозно? Перейдіть поглянути на System.Diagnostics.Debug.
Henk Holterman

Debugger.Launch () запропонує приєднати ваш процес до налагоджувача Visual Studio, коли він запускає цей рядок, тому приклейте це біля точки входу, щоб прикріпити процеси при запуску.
Мирова дружба

1
Минув якийсь час, але - Вам вдалося вирішити проблему? У мене є клієнт, який повідомляє про цю поведінку. Тут важко відтворити на машині, що розвивається. Будь ласка, не соромтеся і поділіться своїм рішенням - я думаю, це варто проголосувати. Дякую!
глухонімий

Відповіді:


71

0xE0434352 - це код винятку для всіх винятків .NET, тому він не скаже вам багато про що. Як ви отримали цей код виключення? Журнал подій?

Найкраще - використовувати відладчик, щоб отримати більше інформації. Якщо налагоджувач Visual Studio вам не допоможе, можливо, вам доведеться перевірити WinDbg за допомогою SOS . Дивіться тут і тут для вступу. Нехай він розірве виняток і подивиться, чи зможете ви отримати більше інформації про те, чому.

Якщо ви підозрюєте, що це проблема під час завантаження збірок, ви можете перевірити журнал Fusion .


4
перед тим, як спробувати налагоджувачі, перевірте відповідь
Тергівера

82

Якщо ви отримуєте цю помилку з засобу перегляду подій, ви повинні побачити іншу подію помилки (принаймні одну) із джерела ".NET Runtime". Подивіться на це повідомлення про помилку, оскільки воно буде містити Exceptionінформацію.


5
Це мені справді допомогло, дякую, отже, я виявив, що мені бракує однієї із залежностей (виняток FileNotFound)
Павел К

4

Я не впевнений, чи допоможе це комусь чи ні, але оскільки це була моя проблема, думаю, варто зазначити:

Я отримував цю помилку, і виявилося, що це проблема з платформою, для якої створено EXE. Ми створили його для x86, і це мав бути x64, через посилання на Oracle у проекті. Коли ми внесли цю зміну, проблема зникла. Отже, подивіться, чи немає у вас подібних конфліктів.


4

Схоже, ця помилка 0xe0434352 стосується ряду різних помилок.

У випадку, якщо це комусь допомагає, я зіткнувся з цією помилкою, коли намагався встановити програму на новій установці Windows 10. Це працювало на інших машинах, і здавалося, що програма миттєво запуститься перед смертю. Після довгих спроб та помилок виявилося, що програма вимагає DirectX9. Хоча була присутня пізніша версія DirectX, вона повинна була мати версію 9. Сподіваюся, це позбавить когось розчарування.


Це дуже своєрідний випадок. Не впевнені, скільки зіткнуться з цією конкретною обставиною.
Еніола

3

Я боровся з цим цілий день, просячи своїх користувачів запускати налагоджувальні версії програмного забезпечення. Тому що, здавалося, він не пройшов перший рядок. Просто збій без інформації.

Тоді я зрозумів, що помилка була всередині форми InitializeComponent.

Спосіб отримати виняток - видалити цей рядок (або прокоментувати):

System.Diagnostics.DebuggerStepThrough()

Позбувшись лінії, ви отримаєте звичайний виняток.


2

Я отримував це, коли додаток розгортався. У моєму випадку я вибрав "Це повнофункціональний додаток" на вкладці безпеки проекту, і це виправило.


3
Це, мабуть, не справжнє виправлення: можливо, ви захочете налаштувати свою програму / її вимоги безпеки, щоб вона працювала належним чином у середовищі середньої довіри. Але це корисна відправна точка - спасибі!
Rup

1

Проблема:

.Net код програми припиняється до того, як він почне своє виконання [консольна програма або програма Windows]

Отримано помилку: Перервано з кодом помилки "E0434352"

Виняток : Невідомий виняток

Сценарій 1:

Коли програма вже виконується, яка використовувала деякі залежні ресурси, і ці ресурси все ще використовуються із запущеною програмою, коли інша програма або той же exe запускається з іншого джерела, тоді одна з програм видає помилку

Сценарій 2:

Коли програма запускається за допомогою планувальника або автоматичних завдань, вона може перебувати у стані виконання у фоновому режимі, тим часом, коли Ви намагаєтеся знову запустити ту саму програму, помилка може бути спровокована.

Рішення:

Створіть програму, коли та де програма випустить усі свої ресурси, як тільки завершиться. Вимкніть весь фоновий процес після закриття програми. Перевірте та уникайте одночасного запуску програми з кількох джерел, таких як пакетний процес, планувальник завдань та зовнішні інструменти. Перевірте наявність залежностей від програми та ресурсів та за потреби очистіть код.


У моєму випадку папка програми або файли в ній були заблоковані / відкриті - оскільки система не дозволяє її перейменовувати (простий тест, щоб перевірити, чи папка та підпапки вільні чи відкриті / заблоковані). Після виходу / входу на сервер знову звільняє замки
Kuleris,

0

Щоб виправити проблему для мене (оскільки ряд програм почав видавати цей виняток раптово, наприклад, CorelDraw X6 був одним), я видалив середовище виконання .NET 4.5 і встановив середовище виконання .NET 4. Дві версії неможливо встановити поряд, але вони використовують однакові номери версій у GAC . Це викликає проблеми, оскільки деякі функції знецінені в 4.5.

DLL Hell повернувся ...


0

Отже .. Я помітив у програмі перегляду подій, що цей збій відповідав помилці "System.IO.FileNotFoundException".

Тож я запустив ProcMon і помітив, що одна з DLL програм не завантажує vcruntime140. Тому я просто встановив vs15 redist, і це спрацювало.


0

Ми отримали цю помилку, коли рядок підключення до нашої бази даних був неправильним. Ключем до з’ясування цього був запуск dotnet blah.dll, який забезпечив стек, що показує нам, що вказаний екземпляр сервера sql не може бути знайдений. Сподіваюся, це комусь допомагає.


0

Я знаю, що це дещо стара тема, але у мене була така проблема і з додатком змінного струму / WPF, який я створював. Додаток чудово працював на машині для розробки, але не запускався на тестовій машині. Журнал застосунків у засобі перегляду подій видав дещо туманну помилку .NET Runtime System.IO.DirectoryNotFoundException.

Я спробував скористатися деяким програмним забезпеченням для налагодження, але додаток не працював би так довго, щоб приєднати відладчик до процесу. Після удару головою об стіл протягом дня та перегляду багатьох веб-сторінок, подібних до цієї, я вирішив вирішити цю проблему, щоб встановити VS2019 на мою тестову машину. Потім я перетягнув файл .exe з його папки (він знаходився глибоко в папці Users [user] \ AppData \ Apps \ 2.0 ...) до відкритого екземпляра VS2019 і запустив його звідти. Відразу ж з’явилося діалогове вікно із винятком та причиною.

У моєму випадку, коли я додав піктограму до однієї з форм, повний шлях до піктограми був поміщений у XAML замість просто імені піктограми. Я скопіював файл значка в папку проекту, але оскільки папка проекту не існує на тестовій машині, це була першопричиною помилки. Потім я видалив шлях із XAML, залишивши лише ім’я піктограми одне, відновив рішення та переопублікував його, і він зараз чудово працював на тестовій машині. Звичайно, є багато причин, крім того, що призвело до помилки, але цей спосіб усунення несправностей, сподіваємось, повинен визначити першопричину помилки, оскільки переглядач подій Windows дає дещо туманну відповідь.

Підводячи підсумок, використовуйте Visual Studio на тестовій машині як своєрідний налагоджувач. Але, щоб він працював правильно, мені довелося перетягнути файл .exe в IDE і запустити (запустити) його звідти. Я вірю, що це також буде працювати з VS2017, а також VS2019. Сподіваємось, це допомагає тому, хто все ще має цю проблему.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.