レイヤー整合性メッセージのデバッグ

パッケージングマシンをシャットダウンし、Shutdown for Finalize を実行すると、uniservice.exe が呼び出され、現在のレイヤー整合性状態が取得されます。Shutdown for Finalize は、必要なプロセスがまだ保留中であるかどうかを確認しています。必要なプロセスがシャットダウンしない場合、保留中の問題に関するメッセージが表示されます。App Layering はこの情報を以下のログファイルに書き込みます。

C:\Program Files\Unidesk\Uniservice\Log\LayerIntegrity.txt C:\Program Files\Unidesk\Uniservice\Log\UniBilcLogs_X.txt

どの UniBilcLogs ファイルが使用されているかを正確に知ることはできないため、最新のタイムスタンプを持つファイルを探してください。「Integrity」を検索します。

マシンをシャットダウンしてファイナライズすることで、レイヤー整合性チェックをバイパスできると考えるかもしれません。しかし、試みると、App Layering アプライアンスはタスクを停止し、パッケージングマシンに戻します。Shutdown for Finalize スクリプトは、レイヤーのファイナライズプロセスを完了する必要があります。

レイヤー整合性に関する警告

以下のレイヤー整合性メッセージは、レイヤーをファイナライズする準備が整う前に完了する必要があるキューに入れられた操作を示します。

  • 「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
  1. これらのエントリのいずれかを確認した場合は、まず再起動から始めます。メッセージが何らかのソフトウェアによる実際の再起動要求ではないことを確認できるまで、必要に応じて複数回再起動してください。

  2. 問題が Net Logon にある場合は、Unidesk Service for Message Management を再起動します。

  3. 前のリストの最初の 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
  4. これらのキーのいずれかを必要に応じて手動で変更します。キーが不要な場合は、削除できます。

  5. NetLogon キーの変更を確認し、以下の点を確認します。

    • 値が起動時と異なるか。
    • コンピューター名がアクティブなコンピューター名と異なるか。

    不一致がある場合は、設定を修正します。

  6. ドメイン参加操作がまだ再起動を待っているかどうかを判断します。

    • 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 インストーラーは Global_MSIExecute を使用して、一度に 1 つのインストーラーのみが実行されるようにします。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 は、インストールされているものと、構成で Windows が検出するものに基づいて、NGEN をいつ実行するかを決定します。NGEN が実行されているときは、常に 完了させてください。中断された NGEN 操作は、機能しない .NET アセンブリーや、.NET システムの他の問題を引き起こす可能性があります。

NGEN プロセスがバックグラウンドで完了するのを待つか、フォアグラウンドに強制的に移行させるかを選択できます。また、以下の手順で説明するように、NGEN 操作のステータスを確認することもできます。ただし、キューのステータスを確認するたびにフォアグラウンドアクティビティが作成され、バックグラウンド処理が一時的に一時停止する可能性があります。

NGEN プロセスをフォアグラウンドに移行すると、進行状況を表示できます。プロセスが完了したら、レイヤーをファイナライズできます。

  1. NGEN 操作をフォアグラウンドに移行します。通常、NGEN はバックグラウンド操作であり、フォアグラウンドアクティビティがある場合は一時停止します。タスクをフォアグラウンドに移行すると、タスクをできるだけ早く完了させるのに役立ちます。これを行うには。
    1. 管理者としてコマンドプロンプトを開きます。
    2. 現在使用中のバージョンの Microsoft .NET Framework ディレクトリに移動します。

      cd C:\Windows\Microsoft.NET\FrameworkNN\vX.X.XXXXX

    3. キューに入れられた項目を実行する NGEN コマンドを入力します。 ngen eqi 3 <!--NeedCopy-->
    4. これにより、NGEN タスクがコマンドプロンプトのフォアグラウンドに移行し、コンパイルされているアセンブリーが一覧表示されます。

      注:

      複数の「コンパイル失敗」メッセージが表示された場合は、タスクマネージャーで MSCORSVW.EXE のインスタンスが実行されているかどうかを確認してください。実行されている場合は、完了させるか、NGEN eqi 3 を再実行してください。タスクを停止するために再起動しないでください。 タスクは完了する必要があります。

  2. NGEN 操作のステータスを確認します。
    1. 管理者としてコマンドプロンプトを開きます。
    2. 次のコマンドを実行してステータスを確認します。 NGEN queue status
    3. 次のステータスが表示されたら、NGEN は完了しており、レイヤーをファイナライズできます。.NET Runtime Optimization Service は停止しています。

レイヤー整合性問題への最終手段(非推奨)

どうしてもファイナライズできないレイヤーがある場合、レジストリキーを使用して、そのレイヤーにレイヤー整合性チェックを無視するように指示できます。

警告: このキーは最終手段としてのみ使用してください!App Layering は、このような状況でのファイナライズをブロックします。レイヤーのファイナライズを許可すると、レイヤーと、そのレイヤーを含むイメージの両方に修復不可能な損害を与える可能性があります。常に最初に Windows 内で問題を解決するように努めてください!

レイヤーの整合性メッセージを無視するには(非推奨)。

  1. regedit.exe を実行し、次のキーを作成します。

    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Uniservice: "BypassLayerCheck"=DWORD 1<!--NeedCopy-->

    値は重要ではありません。重要なのは、値が存在することです。この手順は、レイヤー上のレイヤー整合性チェックをブロックします。これにより、レイヤーとそのレイヤーを含むレイヤー化されたイメージに引き起こされる可能性のある損害に関係なく、レイヤーをファイナライズできます。