3

Недавно я получил новый ПК на работе, и мне пришлось переустанавливать средства разработки и т.д. На ПК установлена Windows XP (blech), и у меня установлены Visual Studio 2010 и .NET Frameworks 2.0, 3.5 и 4.0, каждый со всеми текущими пакетами обновлений и исправлениями. Сама Windows XP также актуальна (если можно так сказать :-)

Одна из повторяющихся проблем, которую я заметил, - это следующее диалоговое окно, которое всплывает после того, как машина некоторое время простаивает :

Отладчик Visual Studio Just-In-Time: в mscorsvw.exe произошло необработанное исключение win32 ...Вы хотите отлаживать, используя выбранный отладчик?

Я подозреваю, что сбой происходит из-за .NET Framework, выполняющего компиляцию Ngen системных сборок в фоновом режиме, и сбой, когда он достигает одной сборки, в частности.

Я нашел еще одно упоминание об этой проблеме на форумах MSDN, и один из предлагаемых обходных путей - настроить функцию предотвращения выполнения данных в Windows XP на "Включение DEP только для основных программ и служб Windows". Тем не менее, это уже настройка, действующая на моем ПК.

Как я могу диагностировать дальше? Когда я пытаюсь присоединиться к процессу, он уже ушел.

Есть ли другие предложенные или вероятные исправления?


ОБНОВИТЬ:

Я нашел больше информации о ngen здесь и здесь.

В командной строке я запустил следующее: ngen executequeueditems .. теперь это позволяет мне надежно воспроизвести проблему, а не ждать, пока не выполнится неактивный фоновый ngen.

Итак, когда ngen.exe попал в следующую запись:

Compiling assembly Microsoft.SqlServer.Management.MultiServerConnection, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91 (CLR v2.0.50727) ...
WARNING: Cannot hardbind to mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 because dependency does not have a native image (check FusLogVw for reason)
Failed to generate native code for dependent image Microsoft.SqlServer.Management.MultiServerConnection, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91 because of the following error: The remote procedure call failed. (Exception from HRESULT: 0x800706BE)

... результатом было следующее сообщение об ошибке:

Служба оптимизации среды выполнения .NET столкнулась с проблемой и должна быть закрыта.

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

Итак, конкретная сборка, на которой происходит сбой: Microsoft.SqlServer.Управление.MultiServerConnection.

Что еще я могу сделать? Меня не особо волнует, может ли это быть в данный момент или нет; Я просто хочу остановить это надоедливое повторяющееся диалоговое окно с ошибками сверху. Я уже попробовал:

ngen uninstall Microsoft.SqlServer.Management.MultiServerConnection ,

... но там написано "ОШИБКА: указанная сборка не установлена".

Есть ли способ удалить сборку из очереди ngen, чтобы ngen даже не пытался сгенерировать для нее собственный образ?

4 ответа4

3

mscorsvw.exe может рассматриваться как программа Microsoft, но при этом использовать DEP. Вы можете проверить, действительно ли он отключен с помощью Process Explorer. Либо добавив столбец DEP, либо проверив свойства процесса.

Visual Studio (по крайней мере для меня) не очень удобен для отладки сбоев, вам лучше получить дамп, чтобы мы могли попытаться выяснить возможные причины. Вы можете установить отладчик по умолчанию, используя drwtsn32.exe -i . Или, если вы хотите узнать, вы можете использовать WinDBG, который позволяет более детально анализировать сбойные программы. Хотя это то, что нужно, если вы не заинтересованы в этом ...

Я подозреваю, что сбой происходит из-за .NET Framework, выполняющего компиляцию Ngen системных сборок в фоновом режиме, и сбой, когда он достигает одной сборки, в частности.

Не будет ли ngen.exe аварийно завершиться ? Можете ли вы подтвердить, что ngen.exe был запущен?

Вы можете настроить Process Monitor так, чтобы он отображал только запуск / останов процесса / потока, чтобы вы могли видеть, что запускалось, просто оставьте его включенным на некоторое время и проконсультируйтесь, как только вы получите это окно отладки.

3

Сбой nGen сборки Sql Server, поскольку предыдущая попытка nGening сборки .Net Framework 2.0 не удалась. Это не имеет ничего общего с .Net 4, поэтому я предлагаю вам перестать смотреть на его службу ngen (2 и 4 используют свои собственные службы).

Что касается того, почему это не удалось - ну, в сети нет огромного количества об этом. Я нашел это на форумах MSDN - там есть кое-что о том, чтобы убедиться, что mscorlib был правильно nGen'd - я бы это проверил.

Интересно, что Sql Server упоминается и в этой теме; хотя сейчас 2005 год, и я думаю, что сборки версии 10, о которых вы здесь говорите, это Sql 2008. Тем не менее, может предоставить что-то.

Но в конечном итоге, если бы это была моя машина, я бы:

  • Удалите .Net 2.0, 3.0 и 3.5 (если вы чувствуете себя смелым, удалите 4.0)

  • Удалите любой компонент Sql Server, содержащий сборку, которая не работает с nGen.

  • Установите .Net 3.5 sp1 redist; убедитесь, что у вас также есть исправление, на которое есть ссылки для дальнейшего продвижения по странице.

  • Подождите, пока все nGening завершатся, прежде чем продолжить.

  • Если вы удалили .Net 4, переустановите его и сейчас.

  • Переустановите компонент сервера Sql, удаленный на шаге 2.

Да, я знаю, что-то вроде «выключи и снова включи» - но я думаю, что это лучше, чем пытаться обойти проблему. Если mscorlib 2.0 неправильно настроил nGen, то .NET 2.0 на самом деле не работает в текущем состоянии. А поскольку это компонент SQL Server, который пытается использовать nGen - с ним будет работать только nGen'd mscorlib v2 (nGen'd mscorlib v4 не будет).

2

Msgstr "Включить DEP только для основных программ и служб Windows".

Так как mscorsvw.exe - это служба, это не влияет на нее.

Как я могу диагностировать дальше?

Посмотрите на файлы журнала ngen. Они, вероятно, находятся в разных папках, таких как C:\Windows\Microsoft.NET\Framework\v4.0.30319 или в любых версиях фреймворка, которые вы установили.

1

Что такое mscorsvw.exe?как отключить его запуск :

Mscorsvw .exe является процессом, связанным с Microsoft .NET framework. Процесс Mscorsvw используется для предварительной компиляции сборок .Net Framework в фоновом режиме.

Процесс Mscorsvw.exe запускается только в фоновом режиме, если ему нужно скомпилировать сборки с наивысшим приоритетом после установки распространяемого пакета .NET Framework, и установлено приложение, использующее .NET Framework, для сборки его сборок.

Обычно прекомпиляция сборок с высоким приоритетом выполняется процессом mscorsvw.exe в течение 5-10 минут, а затем он пытается обработать сборки с низким приоритетом, когда ваш компьютер находится в режиме ожидания.

Отключение или остановка mscorsvw.exe

  1. Перейдите к C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727 в проводнике Windows.
  2. Откройте командную строку, введя cmd в поле выполнения и нажмите клавишу ввода.
  3. Теперь нам нужно указать вышеуказанный путь в команде и теперь набрать
    ngen.exe executequeueditems
    и нажмите ввод.
  4. Теперь подождите, пока процесс прекомпилирует все сборки, через пару минут он будет завершен.

Теперь вы видите, что в диспетчере задач не будет запущен процесс mscorsvw.exe.

Вы также можете использовать эту команду в любое время, чтобы увидеть, есть ли что-нибудь в очереди, ожидающее выполнения:

ngen queue status

а также :

ngen display

Чтобы очистить все элементы в очереди, выполните:

ngen /delete *

Чтобы узнать, какие сборки вызывают проблему, файлы журнала, которые могут помочь ответить на это:

C:\Windows\Microsoft.NET\Framework\<version>\ngen.log
C:\Windows\Microsoft.NET\Framework\<version>\ngen_service.log

С другой стороны, вам не нужны .NET Frameworks 2.0 и 3.5, так как 4.0 должен заменить их всех.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .