App Layering

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

パッケージングマシンをシャットダウンし、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 ランタイム Optimization Service) などのバックグラウンドプロセスが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 は、インストールされているものと構成で検出されたものに基づいて、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-->

    値は重要ではありません。値が存在することが重要です。このステップは、レイヤーの整合性チェックをブロックします。これにより、レイヤーと、それを含むレイヤー化されたイメージに損害を与える可能性があるにもかかわらず、レイヤーのファイナライズが可能になります。