как исправить сбой приложения windows .net при запуске с кодом исключения: 0xe0434352?

<p>я создал приложение .net <a href="http://en.wikipedia.org/wiki/windows\_forms">windows forms</a> в visual studio 2010. я также создал соответствующий пакет установки/установки через visual studio 2010. он построен как 32-разрядное (x86) приложение. (мы используем сторонние элементы управления windows forms, которые являются только 32-разрядными).</p><p>я могу запустить установочный пакет и успешно развернуть его в других 64-разрядных средах windows 7 и 32-разрядных windows xp. установленное приложение отлично работает на этих.</p><p>однако, когда я пытаюсь запустить <a href="http://en.wikipedia.org/wiki/windows\_server\_2008">windows server 2008</a> r2 - 64-разрядную версию, приложение падает при запуске. он успешно установлен через установщик без каких-либо ошибок.</p><p>появляется сбой при загрузке приложения. я поместил окно сообщения в качестве первой строки в приложении, чтобы посмотреть, прошло ли оно загрузку. окно сообщения не отображается, поэтому я предполагаю, что это происходит во время загрузки/инициализации приложения.</p><p>до сих пор я не нашел много, чтобы продолжить. из деталей я вижу следующее:</p><pre><code>exception code: e0434352 </code></pre><p>я ловил рыбу вокруг/гуглил, чтобы увидеть, было ли что-нибудь очевидное, но я ничего не видел. я видел некоторые ссылки на возможное переполнение стека в <a href="http://en.wikipedia.org/wiki/common\_language\_runtime">clr</a> .</p><p>приложение windows forms построено со следующими ссылками:</p><ul> <li>devexpress</li> <li>infragistics winforms контролирует</li> <li>oracle dataaccess dll</li> <li>rabbitmq</li> </ul><p>в чем проблема? как мне подойти к выяснению этого? как мне отладить, чтобы получить больше полезной информации?</p>

<p>0xe0434352 является <a href="http://ig2600.blogspot.com/2011/01/why-do-i-keep-getting-exception-code.html">кодом исключения для всех исключений .net</a> так что это вам мало что скажет. как вы получили этот код исключения? журнал событий?</p><p>лучше всего использовать отладчик для получения дополнительной информации. если отладчик visual studio вам не поможет, вам, возможно, придется проверить <a href="http://en.wikipedia.org/wiki/windbg">windbg</a> with <a href="http://sos.dll%20(sos%20debugging%20extension)">sos</a> . смотрите <a href="http://blog.coryfoy.com/2010/02/debugging-net-applications-with-windbg-and-sos/">здесь</a> и <a href="http://ig2600.blogspot.com/2009/07/finding-clr-exceptions-with-visual.html">здесь</a> для ознакомления. позвольте этому нарушить исключение и посмотрите, сможете ли вы получить больше информации о причинах.</p><p>если вы подозреваете, что это проблема при загрузке сборок, вы можете проверить <a href="http://msdn.microsoft.com/en-us/library/e74a18c4%28v=vs.100%29.aspx">fusion log</a> .</p>

<p>если вы получаете эту ошибку из event viewer, вы должны увидеть другое событие ошибки (по крайней мере одно) из источника ".net runtime". посмотрите на это сообщение об ошибке, так как оно будет содержать информацию <code>exception</code>.</p>

<p>краткое объяснение 0xe0434352 содержится в сообщении в блоге <em> <a href="http://ig2600.blogspot.com/2011/01/why-do-i-keep-getting-exception-code.html">почему я продолжаю получать код исключения e0434352?</a> </em> как указания для отладки через <a href="http://ig2600.blogspot.com/2009/07/finding-clr-exceptions-with-visual.html">windbg и cdb</a> .</p>

<p>похоже, эта ошибка 0xe0434352 применяется к ряду различных ошибок.</p><p>в случае, если это кому-нибудь поможет, я столкнулся с этой ошибкой, когда пытался установить приложение на новую установку windows 10. это работало на других машинах, и выглядело так, как будто приложение мгновенно запустится перед смертью. после долгих проб и ошибок проблема оказалась в том, что приложение требовало directx9. хотя более поздняя версия directx присутствовала, она должна была иметь версию 9. надеюсь, это спасет кого-то от разочарования.</p>

<p>я не уверен, поможет ли это кому-нибудь или нет, но так как это была моя проблема, я думаю, стоит упомянуть:</p><p>я получил эту ошибку, и это оказалось проблемой с платформой, для которой был создан exe-файл. у нас была его сборка для x86, и она должна была быть x64 из-за ссылки oracle в проекте. когда мы внесли это изменение, проблема ушла. итак, посмотрите, есть ли у вас подобные конфликты.</p>

<p>я боролся с этим целый день, прося моих пользователей запускать отладочные версии программного обеспечения. потому что это выглядело так, как будто это не первая строка. просто сбой без информации.</p><p>затем я понял, что ошибка была внутри initializecomponent формы.</p><p>чтобы получить исключение, нужно было удалить эту строку (или закомментировать ее): </p><pre><code>system.diagnostics.debuggerstepthrough() </code></pre><p>как только вы избавитесь от линии, вы получите нормальное исключение.</p>

<p>я получил это, когда приложение развернуто. в моем случае я выбрал «это приложение с полным доверием» на вкладке «безопасность проекта», и это было исправлено.</p>

<p>чтобы решить эту проблему для меня (так как ряд приложений начали выдавать это исключение внезапно, например, coreldraw x6, являющийся одним из них), я удалил среду выполнения .net 4.5 и установил среду выполнения .net 4. две версии не могут быть установлены рядом, но они используют одинаковые номера версий в <a href="http://en.wikipedia.org/wiki/global\_assembly\_cache">gac</a> . это вызывает проблемы, так как некоторые функции устарели в 4.5.</p><p> <a href="https://en.wikipedia.org/wiki/dll\_hell">dll ад</a> вернулся ...</p>

<blockquote> <p>результат:</p> </blockquote><p>код приложения .net прерывается до того, как он начинает свое выполнение [консольное приложение или приложение windows]</p><blockquote> <p>получена ошибка: прервано с кодом ошибки "e0434352"</p> </blockquote><p><strong> исключение </strong>: неизвестное исключение</p><blockquote> <p>сценарий 1: </p> </blockquote><p>когда приложение уже выполнено, которое использовало некоторые из зависимых ресурсов, и эти ресурсы все еще используются с выполненным приложением, когда другое приложение или тот же exe-файл запускается из другого источника, тогда одно из приложений выдает ошибку</p><blockquote> <p>сценарий 2: </p> </blockquote><p>когда приложение запускается планировщиком или автоматическими заданиями, оно может находиться в состоянии выполнения в фоновом режиме, в то время как при повторной попытке запустить то же приложение может возникнуть ошибка.</p><blockquote> <p>решение:</p> </blockquote><p>создайте приложение, когда и где приложение высвободит все свои ресурсы сразу после завершения убейте весь фоновый процесс после закрытия приложения проверьте и избегайте выполнения приложения из нескольких источников, таких как пакетный процесс, планировщик задач и внешние инструменты в то же время . проверьте приложение и зависимости от ресурсов и очистите код, если это необходимо.</p>

<p>итак ... я заметил в средстве просмотра событий, что этот сбой соответствует ошибке "system.io.filenotfoundexception". </p><p>поэтому я запустил <a href="https://technet.microsoft.com/en-us/sysinternals/processmonitor.aspx">procmon</a> и заметил, что одной из программных библиотек не удалось загрузить vcruntime140. так что я просто установил vs15 redist и все заработало. </p>

<p>мы получили эту ошибку, когда строка подключения к нашей базе данных была неправильной. ключом к этому было использование dotnet blah.dll, которая предоставила трассировку стека, показывающую, что указанный экземпляр сервера sql не найден. надеюсь, это кому-нибудь поможет.</p>