Подтвердить что ты не робот

Что может привести к сбою приложения ANY.NET немедленно... кроме проекта, который я создаю, и отладки внутри Visual Studio?

Мое программное обеспечение недавно было развернуто на клиенте, который сказал, что приложение зависало сразу после его запуска. После некоторой начальной отладки клиент предоставил мне удаленный доступ к одному из компьютеров, на котором не удалось запустить приложение. Я обнаружил, что сбой не был характерен для моего приложения. Любое приложение, которое зависело от .NET Framework, немедленно прекращало работу.

Удобно было установить Visual Studio 2008, поэтому я создал приложение "Hello World" и нажал "Отладка". Приложение работало нормально. Но затем, когда я попытался выполнить сгенерированные двоичные файлы в каталоге /bin/Debug/HelloWorld.exe за пределами Visual Studio, он вылетел.

Список вещей, которые я пробовал (ОБНОВЛЕНО):

  • Я проверил, что "Все" имеет разрешения на чтение и выполнение для c:\Windows.
  • Чтобы проверить, что проблема была в .NET Framework (а не в моем приложении), я попытался загрузить Paint.NET на компьютеры. Интерфейс установки рухнул таким же образом.
  • Выполнил ремонт .NET Framework, как описано в http://support.microsoft.com/kb/908077 (Мальчик был этим забавным и отнимал много времени). Неудачно.
  • Установленный .NET 3.5 SP1 (до этого был только .NET 3.5) Примечание: мое приложение нацелено на 2.0, так что я сделал это больше в долгосрочной перспективе... но в процессе я узнал, что .NET 3.5 SP1 также обновляет базовые платформы.
  • Побежал Аарон Стебнер .NET Средство проверки установки. Этот инструмент показал, что .NET был успешно установлен. (Я забыл, если я проверил все версии, но по крайней мере 2.0 работал).
  • Протестировано несколько приложений mini hello world, предназначенных для .NET 2.0 и .NET 3.5, и оба завершились таким же образом.
  • Пробовал запускать .NET приложения через линию windbg cmd. Это позволило мне вызвать мои простые приложения hello world. Итак, простой .NET hello world работает, когда вызывается windbg или запускается через debug в visual studio... но не работает, если я пытаюсь выполнить его автономно.

Я создал файл дампа, используя WinDbg. Это было не так уж и откровенно для меня.

FAULTING_IP:  mscorwks!PEImage::GetEntryPointToken+21 79f4ff9d f6401010        test    byte ptr [eax+10h],10h

EXCEPTION_RECORD:  0012f710 -- (.exr 0x12f710) ExceptionAddress: 79f4ff9d (mscorwks!PEImage::GetEntryPointToken+0x00000021) ExceptionCode: c0000005 (Access violation)   ExceptionFlags: 00000000 NumberParameters: 2    Parameter[0]: 00000000    Parameter[1]: 00000010 Attempt to read from address 00000010

FAULTING_THREAD:  00000b44
PROCESS_NAME:  MyProcess.exe
ERROR_CODE: (NTSTATUS) 0x80000003 - {EXCEPTION}  Breakpoint  A breakpoint has been reached.

EXCEPTION_CODE: (HRESULT) 0x80000003 (2147483651) - One or more arguments are invalid    
DETOURED_IMAGE: 1    
NTGLOBALFLAG:  0    
APPLICATION_VERIFIER_FLAGS:  0    
MANAGED_STACK: !dumpstack -EE OS Thread Id: 0xb44 (0) Current frame:  ChildEBP RetAddr  Caller,Callee

EXCEPTION_OBJECT: !pe cb10b4 Exception object: 00cb10b4 Exception type: System.ExecutionEngineException Message: <none> InnerException: <none> StackTrace (generated): <none> StackTraceString: <none> HResult: 80131506    
MANAGED_OBJECT_NAME:  System.ExecutionEngineException    
CONTEXT:  0012f72c -- (.cxr 0x12f72c) eax=00000000 ebx=00000000 ecx=00000000 edx=0000000e esi=001a1490 edi=00000001 eip=79f4ff9d esp=0012f9f8 ebp=0012fa1c iopl=0         nv up ei pl zr na pe nc cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00010246 mscorwks!PEImage::GetEntryPointToken+0x21: 79f4ff9d f6401010        test    byte ptr [eax+10h],10h     ds:0023:00000010=?? Resetting default scope    
READ_ADDRESS:  00000010     
FOLLOWUP_IP:  mscorwks!PEImage::GetEntryPointToken+21 79f4ff9d f6401010        test    byte ptr [eax+10h],10h    
BUGCHECK_STR:  APPLICATION_FAULT_NULL_CLASS_PTR_DEREFERENCE_SHUTDOWN    
PRIMARY_PROBLEM_CLASS:  NULL_CLASS_PTR_DEREFERENCE_SHUTDOWN
    DEFAULT_BUCKET_ID:  NULL_CLASS_PTR_DEREFERENCE_SHUTDOWN    
LAST_CONTROL_TRANSFER:  from 79ef02b5 to 79f4ff9d    
STACK_TEXT:   79f4ff9d mscorwks!PEImage::GetEntryPointToken+0x21 79ef02b5 mscorwks!PEFile::GetEntryPointToken+0xa0 79eefeaf mscorwks!SystemDomain::ExecuteMainMethod+0xd4 79fb9793 mscorwks!ExecuteEXE+0x59 79fb96df mscorwks!_CorExeMain+0x15c 7900b1b3 mscoree!_CorExeMain+0x2c 7c817077 kernel32!BaseProcessStart+0x23    

SYMBOL_STACK_INDEX:  0    
SYMBOL_NAME:  mscorwks!PEImage::GetEntryPointToken+21    
FOLLOWUP_NAME:  MachineOwner    
MODULE_NAME: mscorwks    
IMAGE_NAME:  mscorwks.dll    
DEBUG_FLR_IMAGE_TIMESTAMP:  471ef729    
STACK_COMMAND:  .cxr 0012F72C ; kb ; dds 12f9f8 ; kb    
FAILURE_BUCKET_ID:  NULL_CLASS_PTR_DEREFERENCE_SHUTDOWN_80000003_mscorwks.dll!PEImage::GetEntryPointToken    
BUCKET_ID:  APPLICATION_FAULT_NULL_CLASS_PTR_DEREFERENCE_SHUTDOWN_DETOURED_mscorwks!PEImage::GetEntryPointToken+21    
WATSON_STAGEONE_URL:  http://watson.microsoft.com/StageOne/MyProcess_exe/2_4_4_39/4a8a192c/unknown/0_0_0_0/bbbbbbb4/80000003/00000000.htm?Retriage=1

Followup: MachineOwner

Изменить 1: подробности журнала событий для этой ошибки, скажем,.NET Runtime версии 2.0.50727.3053 - Неустранимая ошибка механизма выполнения (7A097706) (80131506).

DotNetFatalExecutionErrorScreenshot
(источник: blakerobertson.com)

Изменить 2 (10-7-09): эта проблема все еще активна.

Изменить 3 (3-29-10): Это обновление, чтобы все знали, что я никогда не решал проблему успешно. Клиент, который его обработал, потерял интерес к его решению и просто переосмыслил машину :(. Спасибо за все вклады, хотя.

4b9b3361

Ответ 1

На основе вашего вывода windbg похоже, что кто-то ввел DLL в процесс при запуске процесса и что инъекция не предназначена для любой версии загруженных mscorwks. Если это случайная рабочая станция (например, секретарь), я бы ее конфисковал для MIS/IT для проверки на наличие вредоносного ПО. Если это машина, сидящая в серверной комнате, я бы посмотрел на клиента, чтобы выполнить перемещение на другую машину.

Я не подозреваю, что это случится с любым другим клиентом, и за 8 лет разработки .NET единственное, что может (предположительно) привести к описанию поведения, - попытка запустить приложение .NET в системе с устаревшей версией установленной инфраструктуры (например, отсутствие поддержки, результаты в стандартном диалоге отладки/отмена в большинстве версий Windows), и это НЕ то, что эта проблема. Это также не связано с архитектурой процессора, версией Framework и уровнем SP, оно не связано ни с каким коммерческим программным обеспечением AV, ни с коммерческим программным обеспечением для сетевой безопасности.

Это явно не что-то в вашем коде, и я не вижу, что это то, что вы можете исправить для своего клиента. Я не знаю ни инструмента, ни ряда шагов, которые вы можете использовать для решения этой проблемы, не имея повторного изображения клиента на целевой машине. Прежде чем они это сделают, снова попросите MIS/IT использовать потенциальную вредоносную программу (в частности, вредоносное ПО, которое не будет распространяться среди широкой общественности).

Для соответствующего чтения: http://research.microsoft.com/apps/pubs/default.aspx?id=68568

Удачи.

Ответ 2

Несколько членов нашей команды недавно столкнулись с одной и той же проблемой, и они подтвердили, что после деинсталляции Embassy Trust Suite от Wave System все вернулось к норме. Следующая ссылка привела к ответу.

http://social.msdn.microsoft.com/Forums/en-US/vbgeneral/thread/6e6b8496-c1f1-4fc9-bcc9-2129a6329804/

В рамках расследования они также произошли по этому вопросу SO и попросили опубликовать это как возможное решение, которое могло бы помочь другим.

Ответ 3

У нас была очень похожая проблема в широкомасштабном развертывании во всех случаях, когда исправление в фреймворке исправляло проблему, которую я бы попробовал.

Ответ 4

У меня была аналогичная проблема несколько месяцев назад (я не помню код ошибки, хотя). Попробовав много вещей, следующее решение проблемы (насколько я помню):

Удаление всех временных файлов в временной папке .net(а также проверка разрешения этой папки)

Ответ 5

Была та же проблема, и она была исправлена ​​с помощью мастера публикации. То, что я узнал, что на целевой машине не установлен пакет Visual Basic Powerpack 3.0. После установки это работает как шарм.

Ответ 6

Недавно у меня была такая же проблема, и я сделал эти шаги Microsoft.NET Application Crashes, и он исправил приложение .NET из-за сбоев без цели

Ответ 7

Похоже, что ты сам стал "забавным". Я понятия не имею, но здесь мои карма-блудные призывы в темноте в любом случае.

1) Помимо обычных разрешений пользователя, назначенных Windows, существует также отдельный набор параметров безопасности, специально предназначенных для платформы .NET. Если у вас установлен .NET SDK, найдите "Панель управления Microsoft.NET Framework" на панели управления (может быть в разделе "Администрирование" ). Посмотрите, отличается ли какая-либо из настроек от вашей машины dev.

2) Я предполагаю, что ваш клиент находится под большим пальцем ИТ-режима на своем рабочем месте. Посмотрите, сможете ли вы или ваш клиент получить новую установку Windows, где работает программа, а затем, работая со своей ИТ-группой, применить одно из своих требований (параметры безопасности, антивирусные программы и т.д.) Одновременно, пока ваша программа не остановится за работой. Хорошая старая последняя рабочая ошибка в поиске ошибок. Конечно, это предполагает сотрудничество со своим ИТ-отделом, поэтому я надеюсь, что ваша программа важна для исполнительной власти где-то.

Ответ 8

Нет исправления серебряной пули, и я не думаю, что это проблема разрешения.

Вот что я хотел бы попробовать

  • Если это 64-разрядная машина, попробуйте переключиться на 32-битный режим, я видел это с 32-разрядными DLL файлами, пытающимися работать в 64-разрядной версии.
  • Создайте новый веб-сайт на сервере и запустите aspnet_regiis.
  • Удалите и переустановите рамки 2.0 и 3.5. запускать и запускать aspnet_regiis при завершении

Ответ 9

Пара дополнительных предложений:

  • Чтобы убедиться, что это не проблема vshost.exe, я бы попробовал запустить MyProcess.exe под cdb/windbg и посмотреть поведение.
  • Проблема выглядит как Read AV, и если приложение работает должным образом в отладчике, я бы попытался восстановить мою установку .Net, если может быть возможное повреждение в способе выполнения компоновки .com-сборки OS. mscorwks.dll.

Ответ 10

Запустите его с помощью WinDbg. Используя "Сын забастовки", вы должны быть в состоянии точно увидеть, почему он сбой. Может быть ошибка загрузки сбоку на низком уровне. В прошлом я столкнулся с аналогичными проблемами с использованием WinDbg.

Ответ 11

Убедитесь, что пользователь не запускает приложение из сетевого ресурса. По умолчанию .NET выдает исключение безопасности при попытке запустить приложение из ненадежного источника.

Это поведение можно изменить с помощью утилиты Microsoft.Net Framework Configuration в Инструментах администрирования.

Ответ 12

Так как это не происходит на каждом клиентском компьютере, может ли это быть ОЗУ? Можете ли вы перезагрузить плохую машину и запустить диагностический инструмент памяти?

Может ли DEP быть включен для этой машины в какой-то момент в прошлом? Вы бы не получили исключение .Net для такого рода безопасности, потому что ваше приложение просто не запускается, поэтому есть мало шансов выбросить ошибку.

Ответ 13

Может быть, эта ссылка может помочь вам решить вашу проблему Исправление ошибки ".NET Runtime версии 2.0.50727.3053 - Fatal Execution Engine Error" [.NET ].

В какой операционной системе (Windows XP, Vista и т.д.) установлен ваш клиентский ПК?

Вы пытались полностью удалить .NET Framework (не ремонтировать), а затем переустановить его?

Ответ 14

Недавно у меня возникла проблема, которая проявлялась очень похоже. Оказалось, что некоторые сторонние DLL файлы не были частью моего развертывания (я просто копировал файлы из каталога bin). Я создал приложение настройки, которое собрало все библиотеки DLL, и как только они были развернуты правильно, он прекратил сбой. Странно, что это был трудный провал, а не исключение.

Это может не относиться к вам, поскольку вы говорите, что оно применимо к любому .NET-приложению. Может быть, вы работаете в старом файле проекта с некоторыми остальными ссылками?