Служба образов в машинном коде

Служба образов в машинном коде — это служба Windows, используемая для создания и сопровождения образов в машинном коде. Она позволяет разработчикам откладывать установку и обновление образов в машинном коде, выполняя эти процедуры позже, когда компьютер простаивает.

Обычно служба образов в машинном коде запускается программой установки (установщиком) приложения или обновления. Для действий с приоритетом 3 эта служба выполняется в периоды простаивания компьютера. Служба сохраняет свое состояние и может при необходимости возобновлять работу после перезагрузки. Для нескольких компиляций образов может быть организована очередь.

Данная служба также взаимодействует с командой Ngen.exe. Команды, инициируемые вручную, имеют более высокий приоритет, чем фоновые задачи.

Примечание

В операционной системе Windows Vista служба образов в машинном коде имеет имя "Microsoft.NET Framework NGEN v2.0.50727_X86" или "Microsoft.NET Framework NGEN v2.0.50727_X64".Во всех более ранних версиях Microsoft Windows ее имя — ".NET Runtime Optimization Service v2.0.50727_X86" или ".NET Runtime Optimization Service v2.0.50727_X64".

Запуск отложенных операций

Прежде чем приступать к установке или обновлению, рекомендуется приостановить данную службу. Это позволит заблокировать ее на время, пока установщик будет копировать файлы или помещать сборки в глобальный кэш сборок. Для приостановки службы используется следующая командная строка Ngen.exe:

ngen queue pause

После того как все отложенные операции поставлены в очередь, службу можно будет возобновить с помощью следующей команды:

ngen queue continue

Чтобы отложить генерацию образа в машинном коде при установке нового приложения или обновлении общего компонента, используйте параметр /queue для действия install или update. Следующие командные строки Ngen.exe позволяют установить образ общего компонента в машинном коде и выполнить обновление всех корней, которых это может касаться:

ngen install MyComponent /queue
ngen update /queue

Действие update заново генерирует все образы в машинном коде, ставшие недействительными, а не только те, которые используют компонент MyComponent.

Если в приложении слишком много корней, можно учитывать приоритеты отложенных действий. Следующие команды создают очередь для установки трех корней. Первой устанавливается сборка Assembly1, не дожидаясь периода простоя. Assembly2 также устанавливается без ожидания простоя, но после завершения всех действий с приоритетом 1. Assembly3 устанавливается, когда служба обнаружит, что компьютер простаивает.

ngen install Assembly1 /queue:1
ngen install Assembly2 /queue:2
ngen install Assembly3 /queue:3

Можно задать синхронное выполнение действий, находящихся в очереди; для этого используется действие executeQueuedItems. Если задать необязательный приоритет, это действие затронет только те действия из очереди, у которых такой же или более низкий приоритет. По умолчанию подразумевается приоритет 3, поэтому следующая команда Ngen.exe обработает все действия в очереди немедленно и не возвратит управление, пока они не закончатся:

ngen executeQueuedItems

Синхронные команды выполняются программой Ngen.exe и не используют службу образов в машинном коде. Можно выполнять действия с помощью Ngen.exe, пока служба образов в машинном коде работает.

Завершение работы службы

После того как служба инициирована выполнением команды Ngen.exe с параметром /queue, она продолжает работать в фоновом режиме, пока не будут завершены все действия. Служба сохраняет свое состояние и может при необходимости возобновлять работу после перезагрузки. Как только служба обнаружит, что в очереди больше нет действий, она сбрасывает свой статус, чтобы не запускаться повторно после очередной перезагрузки компьютера, и затем завершает работу.

Взаимодействие службы с клиентами

В версии .NET Framework 2.0 взаимодействие со службой образов в машинном коде может осуществляться только через программу командной строки Ngen.exe. Используйте эту программу в скриптах установки для управления очередями действий, выполняемых службой образов в машинном коде, и для взаимодействия с этой службой.

См. также

Ссылки

Ngen.exe (генератор образов в машинном коде)

Командная строка Visual Studio