レイヤー整合性メッセージのデバッグ
パッケージングマシンをシャットダウンして最終処理のためにシャットダウンを実行すると、現在のレイヤー整合性状態を取得するために
uniservice.exeを呼び出します。最終処理のためにシャットダウンは、必要なプロセスがまだ保留中であるかどうかを確認しています。必要なプロセスがシャットダウンしない場合、保留中の問題に関するメッセージが表示されます。App Layeringは、この情報を以下のログファイルに書き込みます。
C:\Program Files\Unidesk\Uniservice\Log\LayerIntegrity.txt C:\Program Files\Unidesk\Uniservice\Log\UniBilcLogs_X.txt
どの
UniBilcLogsファイルが使用されているかを正確に知ることはできません。そのため、最新のタイムスタンプを持つファイルを探してください。「Integrity」を検索してください。
マシンをシャットダウンして最終処理を行うことで、レイヤー整合性チェックをバイパスできると考えるかもしれません。しかし、試みると、App Layeringアプライアンスはタスクを停止し、パッケージングマシンに戻します。最終処理のためにシャットダウンスクリプトは、レイヤーの最終処理プロセスを完了する必要があります。
レイヤー整合性の警告
以下のレイヤー整合性メッセージは、レイヤーが最終処理の準備が整う前に完了する必要があるキューに入れられた操作を示しています。
-
「RunOnceスクリプトが未処理です - パッケージングマシンを確認して再起動してください。」
-
「インストール後の再起動が保留中です - パッケージングマシンを確認して再起動してください。」
-
「Microsoft
ngen操作がバックグラウンドで進行中です。」 -
「MSIインストール操作が進行中です - パッケージングマシンを確認してください。」
-
「ブートディスクのドライバーを更新するための再起動が保留中です - パッケージングマシンを確認して再起動してください。」
-
「Microsoft ngen操作が必要です。」
-
「Software Center Clientは実行するように構成されていますが、SMSCFG.INIがまだ存在します。」
マシンをシャットダウンしても、レイヤー整合性メッセージをバイパスすることはできません。すべてのプロセスが完了するまで、App Layeringソフトウェアは停止し、パッケージングマシンに戻されます。
Microsoft
NGen 操作が進行中の場合は、次のセクションで説明するように、その操作を早めることができます。
「RunOnce スクリプトが未処理です」
レイヤーを作成したり、バージョンを追加したりする際に、ユーザーがデスクトップの起動 (または再起動) 後に初めてログインしたときに実行されるスクリプトを指定できます。たとえば、Run Once スクリプトを使用して、アプリケーションのセットアップを完了できます。 Run Once スクリプトは、レイヤーにインストールされている
.cmd または .bat ファイルです。
Run Once スクリプトがイメージ上で実行された後、Windows は通常、再起動時に関連するレジストリキーを削除します。このメッセージは、Windows が次のいずれかの場所から Run Once スクリプトのキーを削除しなかったことを示しています。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\RunOnce
この問題を解決するには:
-
スクリプトファイルが存在しない場合は、レジストリキーを削除します。
-
メッセージで参照されているスクリプトが存在する場合は、手動でスクリプトを実行し、レジストリキーを削除します。
「インストール後の再起動が保留中です」
このメッセージは、次のいずれかのレジストリキーに起因します。
-
HKLM\System\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations -
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootPending -
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired -
HKLM\SYSTEM\CURRENTCONTROLSET\SERVICES\NETLOGON\Start -
HKLM\SYSTEM\CURRENTCONTROLSET\CONTROL\COMPUTERNAME\ACTIVECOMPUTERNAME -
HKLM\SYSTEM\CURRENTCONTROLSET\CONTROL\COMPUTERNAME\COMPUTERNAME
-
これらのエントリのいずれかが表示された場合は、まず再起動します。メッセージがソフトウェアによる実際の再起動要求ではないことを確認できるまで、必要に応じて複数回再起動してください。
-
問題がNet Logonにある場合は、
Unidesk Service for Message Managementを再起動します。 -
前のリストの最初の3つのレジストリキーのいずれかが存在するかどうかを確認します。
-
HKLM\System\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations -
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootPending -
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired
-
-
これらのキーを必要に応じて手動で変更します。キーが不要な場合は、削除できます。
-
NetLogonキーの変更を探し、以下を確認します。-
値が起動時のものと異なる。
-
コンピューター名がアクティブなコンピューター名と異なる。
不一致がある場合は、設定を修正します。 -
-
ドメイン参加操作がまだ再起動を待っているかどうかを判断します。
-
HKLM\SYSTEM\CURRENTCONTROLSET\SERVICES\NETLOGON\Start -
HKLM\SYSTEM\CURRENTCONTROLSET\CONTROL\COMPUTERNAME\ACTIVECOMPUTERNAME -
HKLM\SYSTEM\CURRENTCONTROLSET\CONTROL\COMPUTERNAME\COMPUTERNAME
これら3つのレジストリキーは変更できませんが、一部のソフトウェアは再起動のたびにNETLOGON\Startキーを変更できます。 -
手順1に記載されている最初の3つのキーをクリーンアップした後も、再起動時にプロンプトが表示される場合は、レイヤー整合性チェックを無視することを選択できます。ただし、これは最終手段であり、通常は推奨されません。レイヤー整合性チェックを無視する方法の詳細については、この記事の最後にある「最終手段」セクションを参照してください。
「Microsoft ngen操作がバックグラウンドで進行中です」
このメッセージは、フォアグラウンドまたはバックグラウンドの
NGEN操作がまだ進行中であることを示しています。NGEN操作とは、.Netアセンブリがネイティブイメージにコンパイルされることです。このメッセージは、プロセスがまだ進行中であることを意味します。進行状況を監視できます。
警告:
再起動しないでください。プロセスが最初からやり直される可能性があります。
フォアグラウンドで進行状況を監視するには、
ngen eqi 3を実行します。または、待機して定期的にngen queue statusを実行し、プロセスの進行状況を確認します。ngen queue statusを実行するとバックグラウンドプロセスが遅くなることに注意してください。これは、フォアグラウンドでステータスを確認するたびにバックグラウンドプロセスが一時停止するためです。
NGENプロセスが完了するまで待つことが重要です。辛抱強く待ってください。途中でプロセスを終了したり、再起動したりすると、部分的に書き込まれた.Netアセンブリが残る可能性があります。
MSCORSVW.EXE(NETランタイム最適化サービス)などのバックグラウンドプロセスが1日以内に完了しない場合は、古いバックグラウンドプロセスを確認してください。再起動が役立つ場合があります。
次のサービスが完了したら、続行できます。
-
ngen.exe -
ngentask.exe -
mscorsvw.exe
「MSIインストール操作が進行中です」
このメッセージは、
Global\_MSIExecute という名前のシステムミューテックス (相互排他オブジェクト) が存在することを示しています。MSI インストーラーは、一度に 1 つのインストーラーのみが実行されるように Global\_MSIExecute を使用します。MSI インストールが実行されていないことを確信している場合、リソースにロックがかかっている可能性があります。レイヤーに戻り、どのプロセスがロックされているかを特定してください。
「ブートディスク上のドライバーを更新するために再起動が保留されています」
このメッセージは、システム起動時に開始するように設定されているサービスまたはドライバーが変更またはインストールされたことを示しています。変更されたドライバーが正常に起動できることが重要です。
通常、一度再起動すればドライバーは正常に動作します。しかし、Microsoft Defender や McAfee のようなソフトウェアが、起動するたびにドライバーファイルを変更しようとし、そのたびにこの整合性チェックがトリガーされるケースがいくつか見られました。再起動しても解消されません。その場合、以下の「最終手段」のセクションで説明されているように、レイヤー整合性チェックをバイパスするオプションを使用する必要があるかもしれません。
「Microsoft NGen 操作が必要です」
このメッセージは、アプリケーションがパッケージングマシンにインストールされ、優先度レベル 3 で更新される項目がスケジュールされたことを示しています。
この優先度レベルでは、CPU がアイドル状態のときにのみ操作が実行され、それ以上の活動がなくなるまで待機します。
公開されたイメージ上でアプリケーションが最適な方法で実行されるようにするため、App Layering は最終処理プロセスをブロックします。これは、
NGEN プロセスがアプリが展開されるすべてのマシンではなく、パッケージングマシン上で実行される必要があるためです。
NGEN eqi 3 (優先度レベル 3) の場合、次のいずれかを実行できます。
-
以下の両方のディレクトリで未完了の操作を実行します。
-
c:\windows\microsoft.net\framework\vYY.MM.Build -
c:\windows\microsoft.net\framework64\v4.0.30319
-
-
待機します。
NGEN操作は通常、15 分間のアイドル時間の後に自動的に実行されます。
検査される値には以下が含まれます。
-
HKLM\SOFTWARE\Microsoft\\.NETFramework\v2.0.50727\NGenService\Roots\WorkPending
-
HKLM\SOFTWARE\WOW6432Node\Microsoft\\.NETFramework\v2.0.50727\NGenService\Roots\WorkPending
1 の値は、処理待ちの作業項目がキューに入っていることを意味します。
「Software Center Client は実行するように構成されていますが、SMSCFG.INI がまだ存在します...」
このメッセージは、このマシンが
ccmexec.exe を サービス として構成しており、無効 として構成されていないことを示しています。
パッケージングマシンで作成されたレイヤーは、VDI 環境で正しく展開するために適切にシールする必要があることを知っているため、
SMSCFG.ini が 存在しない ことを確認しています。レイヤーの最後に実行するコマンドファイルがあります。レイヤーをシールするために使用できるバッチコマンドファイルで実行するコマンドを提供しました。このスクリプトを実行するには、管理者としてコマンドウィンドウにログインしてください。
c:\windows\setup\scripts\SEALSCCMCLIENT.cmd
Microsoft NGen 操作の迅速化
NGEN 実行可能ファイルは Microsoft Native Image Generator です。これは .NET システムの一部です。Ngen は .NET バイトコードをネイティブイメージに再コンパイルし、レジストリエントリを構築します。Windows は、インストールされているものと構成で検出されたものに基づいて、NGEN をいつ実行するかを決定します。NGEN が実行されている場合は、常に 完了させてください。中断された NGEN 操作は、機能しない .NET アセンブリ、または .NET システム内のその他の問題を引き起こす可能性があります。
NGEN プロセスがバックグラウンドで完了するのを待つか、フォアグラウンドに強制的に移行させるかを選択できます。また、以下の手順で説明するように、NGEN 操作のステータスを確認することもできます。ただし、キューのステータスを確認するたびにフォアグラウンドアクティビティが作成され、バックグラウンド処理が一時的に一時停止する可能性があります。
NGEN プロセスをフォアグラウンドに移行すると、進行状況を表示できます。プロセスが完了したら、レイヤーを確定できます。
-
NGEN操作をフォアグラウンドに移行します。通常、NGENはバックグラウンド操作であり、フォアグラウンドアクティビティがある場合は一時停止します。タスクをフォアグラウンドに移行すると、タスクをできるだけ早く完了させることができます。これを行うには:-
管理者としてコマンドプロンプトを開きます。
-
現在使用中の Microsoft .NET Framework のバージョンディレクトリに移動します。
cd C:\Windows\Microsoft.NET\FrameworkNN\vX.X.XXXXX -
キューに入っている項目を実行するために
NGENコマンドを入力します。ngen eqi 3 -
これにより、
NGENタスクがコマンドプロンプトの前面に表示され、コンパイルされているアセンブリが一覧表示されます。注:「コンパイルに失敗しました」というメッセージが複数表示される場合は、タスクマネージャーでMSCORSVW.EXEのインスタンスが実行されているかどうかを確認してください。実行されている場合は、完了させるか、NGEN eqi 3を再実行してください。タスクを停止するために再起動しないでください。 タスクは完了する必要があります。
-
-
NGEN操作のステータスを確認する-
管理者としてコマンドプロンプトを開きます。
-
次のコマンドを実行してステータスを確認します。
NGEN queue status -
次のステータスが表示されたら、
NGENは完了しており、レイヤーを確定できます。.NET Runtime Optimization Serviceは停止しています。
-
レイヤーの整合性問題に対処するための最終手段(非推奨)
どうしても確定できないレイヤーがある場合は、レジストリキーを使用して、そのレイヤーにレイヤーの整合性チェックを無視させるように指示できます。
警告: このキーは最終手段としてのみ使用してください。App Layering は、このような状況での確定をブロックします。レイヤーを確定できるようにすると、レイヤーと、そのレイヤーを含むイメージの両方に修復不可能な損害を与える可能性があります。常に最初に Windows 内で問題を解決するようにしてください!
レイヤーの整合性メッセージを無視するには(非推奨):
-
regedit.exeを実行し、このキーを作成します。[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Uniservice: "BypassLayerCheck"=DWORD 1値は重要ではありません。重要なのは、値が存在することです。この手順は、レイヤーの整合性チェックをブロックします。これにより、レイヤーとそのレイヤーを含むレイヤー化されたイメージに与える可能性のある損害に関係なく、レイヤーを確定できるようになります。