本机映像服务

本机映像服务是一项用于生成和维护本机映像的 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 执行操作。

服务关闭

在执行包含 /queue 选项的 Ngen.exe 命令启动该服务之后,服务在后台运行,直到所有操作完成。 该服务可保存自身状态,如果需要,在进行多次重新启动后,服务仍能继续运行。 当该服务检测到已没有排队的操作时,它重置自身状态以使其在计算机下次启动时不会重新启动,然后关闭自身。

服务与客户端的交互

在 .NET Framework 2.0 版中,与本机映像服务进行的唯一交互是通过命令行工具 Ngen.exe 进行的。 在安装脚本中使用该命令行工具对本机映像服务的操作进行排队,并与该服务进行交互。

请参见

参考

Ngen.exe(本机映像生成器)

Visual Studio 命令提示