- 990x.top
- Простой компьютерный блог для души)
- Microsoft .NET Framework NGEN — что это за служба? (mscorsvw.exe)
- Разбираемся
- Тип запуска
- Можно ли отключать?
- Вывод
- Службы Windows
- Создание службы для Windows
- Практическое руководство. Создание служб Windows How to: Create Windows Services
- Создание приложения службы Windows To create a Windows Service application
990x.top
Простой компьютерный блог для души)
Microsoft .NET Framework NGEN — что это за служба? (mscorsvw.exe)
Приветствую друзья! Сегодня у нас на разбор попала служба Microsoft .NET Framework NGEN. Моя задача — максимально узнать зачем она, насколько важна, может ее вообще можно безопасно отключить? Будем разбираться!
Разбираемся
Microsoft .NET Framework NGEN — служба, работающая под процессом mscorsvw.exe. Теоретически может ускорять работу программ, для которых необходима среда .NET Framework.
Информации в интернете мало. То что относится к .NET Framework — это и так понятно. Однако упоминание в названии NGEN — скорее всего не просто так..
Вообще NGEN расшифровывается вроде как Native Image Generator, вот инфа с вики:
Если вы точно уверены, что Windows у вас исправна, то можно разрешить службе выполнить свою работу, для этого используйте команду:
%WinDir%\Microsoft.NET\Framework\v4.0.30319\ngen.exe update /force /queue
Если винда 64-бит добавьте в пути 64 к слову Framework. Пусть сделает то что ей нужно — грузить ПК может пару часов, если не остановится — делайте перезагрузку. Если остановится, и после этого снова иногда будет вызывать нагрузку — пробуйте исправить командой ниже либо отключайте ее вообще. Команду нашел на форуме — надеюсь работает.
У некоторых пользователей данная служба вызывала долгую загрузку винды, также тормоза были и после запуска. Тормоза могут быть связаны с сетью, происходит какой-то конфликт между службой и сетевыми процессами.. на форуме OSzone авторитетный юзер предложил выполнить команду в командой строке:
Тут также, если винда 64-битная — добавьте 64 к слову Framework.
Судя по тому, сколько юзеров посчитало сообщение полезным — есть вероятность что команда поможет и вам.
При проблемах со службой, а также вообще с Фраемворком — можно воспользоваться офф инструментом Microsoft .NET Framework Repair Tool. Правда исправит ли ошибки — гарантии нет, но все таки его предлагает сама компания Майкрософт, поэтому можно и попробовать… вот офф ссылка, внешний вид программы:
Реально, при проблемах — стоит попробовать эту прогу.
У одного чела не запускался фаервол. И в этом была виновата служба NGEN. Как видим — реально может создавать разные проблемы((
Еще вроде как имеет свои задания в планировщике по этому адресу:
Библиотека планировщика заданий > Microsoft > Windows > .NET Framework
То что обведено красной рамкой — непонятно, вроде как критически важное задание что ли.. Да, их можно отключить, возможно после — грузить ПК уже не будут. Чтобы быстро открыть планировщик — зажмите Win + R, напишите команду taskschd.msc > OK.
Тип запуска
На офф форуме Майкрософт говорится — лучше чтобы служба имела тип запуска вручную:
Чтобы изменить тип запуска — два раза нажмите по службе, будет окошко свойств, и там будет меню Тип запуска — выберите Вручную.
Быстро открыть список служб можно так: зажимаете Win + R, пишите команду services.msc и нажимаете ОК.
Хотя один юзер написал — служба однократно грузит ПК, проводит там какую-то работу, и после этого уже тормозов не будет. Но.. увы.. кажется у многих это происходит далеко не однократно((
Можно ли отключать?
В принципе, как я понимаю — служба не основная. Она вроде как нужна именно для ускорения работы некоторых программ. Во-вторых отключение — действие, которое можно всегда исправить.
Поэтому не вижу причин чтобы не попробовать отключить. Внимание! На всякий случай перед отключением можно создать точку восстановления:
- Зажимаете Win + R, пишите команду sysdm.cpl, далее нажимаете ОК.
- Появится окошко, активируйте вкладку Защита системы.
- Выбираете системный диск. Нажимаете Создать. Если кнопка создать неактивна — нажимаете настроить и включаете защиту системы. Нажали создать > пишите название, советую назвать например До отключения NGEN.
- После создания точки уже можно службу отключать, а также при необходимости провести еще некоторые эксперименты, в случае проблем — при помощи точки вернетесь в прошлое))
Теоретически если процесс mscorsvw.exe грузит ПК — то отключение службы тоже может помочь..
Нашел полезную инфу:
Что это значит? Что после отключения некоторые приложения, написанные на платформе .NET — могут работать медленнее. Ничего критически опасного здесь нет, поэтому можно и обойтись без службы, учитывая что она способна создавать тормоза..
Вывод
- Мы точно не смогли выяснить зачем нужна служба. Но предположительно — для ускорения работы программ, для которых нужна среда .NET Framework.
- Вероятно всего — можно отключить. При проблемах — включите обратно. Точка восстановления перед отключением не помешает.
Службы Windows
Создание службы для Windows
Одним из важнейших компонентов ОС Windows являются службы. Фактически это отдельные приложения, которые не имеют графического интерфейса и которые выполняют различные задачи в фоновом режиме. Службы могут быть запущены при старте операционной системы, так и в любой другой момент работы пользователя. Распространенным примером служб являются различные веб-серверы, которые в фоновом режиме прослушивают определенный порт на наличие подключений, и если подключения имеются, то взаимодействуют с ними. Это могут быть также различные вспомогательные сервисы обновлений для других установленных программ, которые обращаются к серверу, чтобы узнать, есть ли новая версия приложения. В общем то мы можем открыть панель служб и сами увидеть все установленные и запущенные службы:
Рассмотрим, как создавать свои службы в C#. В качестве реализуемой задачи выберем наблюдение за изменениями в определенной папке в файловой системе. Теперь создадим для ее выполнения службу.
Вначале создадим новый проект, который будет иметь тип Windows Service . Назовем проект FileWatcherService:
После этого Visual Studio генерирует проект, который имеет все необходимое. Хотя в принципе нам необязательно выбирать именно этот тип проекта, можно было бы создать проект библиотеки классов, и затем в нем определить все необходимые классы.
Итак, новый проект выглядит следующим образом:
Здесь также есть файл Program.cs и есть собственно узел службы Service1.cs .
Служба представляет обычное приложение, но она не запускаетс сама по себе. Все вызовы и обращения к ней проходят через менеджер управления службами (Service Control Manager или SCM). Когда служба запускается автоматически при старте системы или вручную, то SCM обращается к методу Main в классе Program:
Метод Main по умолчанию определен таким образом, чтобы запускать сразу несколько служб, которые определены в массиве ServicesToRun. Однако по умолчанию проект содержит только одну службу Service1. Сам запуск производится с помощью метода Run: ServiceBase.Run(ServicesToRun) .
Сама запускаемая служба представлена узлом Service1.cs. Однако на самом деле это не простой файл кода. Если мы откроем этот узел, то увидим в нем файл дизайнера службы Service1.Designer.cs и класс Service1.
Класс Service1 собственно представляет службу. По умолчанию он имеет следующий код:
Класс службы должен наследоваться от базового класса ServiceBase . Этот класс определяет ряд методов, важнейшие из которых метод OnStart() , который запускает действия, выпоняемые службой, и метод OnStop() , останавливающий службу.
После того, как SCM вызовет метод Main и зарегистрирует службу, происходит непосредственный ее вызов через запуск метода OnStart.
Когда в консоли служб или через командную строку мы посылаем команду на остановку службы, то SCM обращается к методу OnStop для ее остановки.
Кроме этих двух методов в классе службы можно переопределить еще несколько методов базового класса ServiceBase:
OnPause : вызывается при приостановке службы
OnContinue : вызывается при возобновлении работы службы после ее приостановки
OnShutdown : вызывается при завершении работы Windows
OnPowerEvent : вызывается при изменении режима электропитания
OnCustomCommand : вызывается при получении службой пользовательской команды от Менеджера Управления Службами (Service Control Manager / SCM)
В конструкторе класса Service1 вызывается метод InitializeComponent() , который определен в файле дизайнера Service1.Designer.cs:
Единственное, что надо в нем отметить, это установка названия службы (свойство ServiceName):
Это то название, которое будет отображаться в консоли служб после установки данной службы. Мы можем его изменить, а можем и оставить как есть.
Теперь изменим код службы следующим образом:
Ключевым классом, который инкапсулирует всю функциональность, является класс Logger. С помощью объекта FileSystemWatcher он будет вести мониторинг изменений в папке D://Temp. В методе Start() устанавливается, что мы будем отслеживать изменения через объект FileSystemWatcher. И вся работа будет идти, пока булевая переменная enabled равна true . А метод Stop() позволит завершить работу класса.
События FileSystemWatcher позволяют отслеживать все изменения в наблюдаемой папке. При этом будет вестись запись изменений в файл templog.txt. Чтобы не было гонки ресурсов за файл templog.txt, в который вносятся записи об изменениях, процедура записи блокируется заглушкой lock(obj) .
В итоге после создания, изменения, переименования и удаления файл лога будет содержать что-то наподобие:
В самом классе службы Service1 в конструкторе устанавливается ряд опций:
В методе OnStart() для запуска объекта Logger вызывется новый поток:
Новый поток нужен, так как текущий поток обрабатывает только команды SCM и должен возвращаться из метода OnStart как можно быстрее.
Когда от менеджера SCM поступает команда на остановку службы, срабатывает метод OnStop, который вызывает метод logger.Stop() . Дополнительная задержка позволит потоку логгера остановиться:
Однако самого класса службы еще недостаточно. Нам необходимо еще создать устанощик службы.
Практическое руководство. Создание служб Windows How to: Create Windows Services
При создании службы можно использовать шаблон проекта Visual Studio, который называется Служба Windows. When you create a service, you can use a Visual Studio project template called Windows Service. Этот шаблон автоматически выполняет основную часть работы, ссылаясь на необходимые классы и пространства имен, устанавливая наследование от базового класса для служб и переопределяя некоторые методы, которые вы обычно хотите переопределять. This template automatically does much of the work for you by referencing the appropriate classes and namespaces, setting up the inheritance from the base class for services, and overriding several of the methods you’re likely to want to override.
Шаблон проекта «Службы Windows» в экспресс-выпуске Visual Studio отсутствует. The Windows Services project template is not available in the Express edition of Visual Studio.
Для создания функциональной службы необходимо выполнить, как минимум, следующее: At a minimum, to create a functional service you must:
Задайте свойство ServiceName. Set the ServiceName property.
Создайте установщики, необходимые для приложения службы. Create the necessary installers for your service application.
Переопределите и задайте код для методов OnStart и OnStop для настройки режимов поведения службы. Override and specify code for the OnStart and OnStop methods to customize the ways in which your service behaves.
Создание приложения службы Windows To create a Windows Service application
Создайте проект Служба Windows. Create a Windows Service project.
Инструкции по созданию службы без использования шаблона см. в разделе Практический пример. Создание служб программным способом. For instructions on writing a service without using the template, see How to: Write Services Programmatically.
В окне Свойства задайте для своей службы свойство ServiceName. In the Properties window, set the ServiceName property for your service.
Значение ServiceName свойства всегда должно соответствовать имени, указанному в классах установщика. The value of the ServiceName property must always match the name recorded in the installer classes. При изменении этого свойства необходимо также обновить свойство ServiceName классов установщика. If you change this property, you must update the ServiceName property of installer classes as well.
Установите любые из следующих свойств для определения режима работы службы. Set any of the following properties to determine how your service will function.
Свойство. Property | Параметр Setting |
---|---|
CanStop | True , чтобы указать, что служба может принимать запросы на останов работы; false для предотвращения останова службы. True to indicate that the service will accept requests to stop running; false to prevent the service from being stopped. |
CanShutdown | True , чтобы указать, что служба хочет принимать уведомления о выключении компьютера, на котором она работает, позволяя ему вызывать процедуру OnShutdown. True to indicate that the service wants to receive notification when the computer on which it lives shuts down, enabling it to call the OnShutdown procedure. |
CanPauseAndContinue | True , чтобы указать, что служба может принимать запросы на приостановку или возобновление выполнения; false для предотвращения приостановки и возобновления работы службы. True to indicate that the service will accept requests to pause or to resume running; false to prevent the service from being paused and resumed. |
CanHandlePowerEvent | True , чтобы указать, что служба может обрабатывать уведомления об изменениях состояния питания компьютера; false , чтобы не сообщать службе об этих изменениях. True to indicate that the service can handle notification of changes to the computer’s power status; false to prevent the service from being notified of these changes. |
AutoLog | True для внесения информационных записей в журнал событий приложения, когда служба выполняет некоторое действие; false для отключения этой функции. True to write informational entries to the Application event log when your service performs an action; false to disable this functionality. Дополнительные сведения см. в разделе Практическое руководство. Запись сведений о службах в журнал. For more information, see How to: Log Information About Services. Примечание. По умолчанию свойство AutoLog имеет значение true . Note: By default, AutoLog is set to true . |
Когда CanStop или CanPauseAndContinue имеют значение false , диспетчер служб будет отключать пункты меню, отвечающие за остановку, приостановку или возобновление работы службы. When CanStop or CanPauseAndContinue are set to false , the Service Control Manager will disable the corresponding menu options to stop, pause, or continue the service.
Откройте редактор кода и введите данные для выполнения операций для процедур OnStart и OnStop. Access the Code Editor and fill in the processing you want for the OnStart and OnStop procedures.
Переопределите все прочие методы, для которых необходимо определить функциональные возможности. Override any other methods for which you want to define functionality.
Добавить установщики, необходимые для приложения службы. Add the necessary installers for your service application. Дополнительные сведения см. в разделе Практическое руководство. Добавление установщиков в приложение-службу. For more information, see How to: Add Installers to Your Service Application.
Скомпилируйте проект, выбрав в меню Сборка пункт Собрать решение. Build your project by selecting Build Solution from the Build menu.
Не нажимайте клавишу F5 для запуска проекта — таким способом нельзя запустить проект службы. Do not press F5 to run your project — you cannot run a service project in this way.
Установите службу. Install the service. Дополнительные сведения см. в разделе Практическое руководство. Установка и удаление служб. For more information, see How to: Install and Uninstall Services.