原生映像服務
更新:2007 年 11 月
原生映像服務一種 Windows 服務,用來產生及維護原生映像。原生映像服務可讓開發人員將原生映像的安裝和更新延遲到電腦閒置的期間。
一般來說,原生映像服務是由應用程式或更新的安裝程式 (Installer) 所啟始。如果是優先權 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。在安裝指令碼中使用命令列工具,將對原生映像服務的動作加入佇列,並與服務進行互動。