SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

Pre-staged app cleanup が実行済みかどうかを確認する

leave a comment

西の某氏 (えろす師匠) がえろす師匠のブログWindows8.1にSysprepをかけるとストアアプリのタイトルが英語になってしまう? という投稿を書いてくださっています。
この問題は、タスクスケジューラーの [Pre-staged app cleanup] が実行されてしまった後に一般化した Sysprep (sysprep.exe /generalize) を実行するとプロビジョニングされたストアアプリで展開されたストアアプリの UI が英語版になってしまうというものです。
image
左が初期状態のスタート画面、右が上記のタスクが実行された後に一般化した Sysprep を実行した後のスタート画面になります。
タスクが動いた後に、一般化した Sysprep を実行し、プロビジョニングされたストアアプリが展開されるとアプリが英語版でインストールされてしまいます。
imageimage
この現象についてちょっと調べてみたことのメモを。

上記のタスクは 8.1 Preview でも話題になっており、実行された場合は Sysprep が失敗するので、Sysprep を実行する場合は、インストール後 1 時間以内にタスクを手動で停止するということが、Preview のリリースノートに記載されていました。
Release Notes: Important Issues in Windows 8.1 Preview

Schtasks.exe /change /disable /tn "MicrosoftWindowsAppxDeploymentClientPre-staged app cleanup"

Preview の時には、このタスクが実行されると Sysprep が失敗してしまうという現象でしたが、RTM 版ではこのタスクが実行されると、プロビジョニングされたストアアプリの言語情報が削除されるという現象が発生してしまうようです。
公式のドキュメントとしては、System Center 2012 R2 Configuration Manager リリース ノート に記述されていました。以下が該当箇所の抜粋になります。
追記
KB が出たようです。
Known issues that affect the AppX cleanup maintenance task in Windows 8.1 and Windows Server 2012 R2

Windows 8.1 AppX クリーンアップ メンテナンス タスクが Sysprep に影響する可能性がある


Windows 8.1 をインストールすると、コンピューターを使用し始めて 60 分後に、Pre-Staged App Cleanup という組み込みのメンテナンスが実行され、その後 15 分間、コンピューターがアイドル状態になります。このメンテナンス タスクの後で Sysprep が実行された場合、Sysprep によって setupact.log に警告が生成されます。
このイメージをキャプチャして展開すると、エンド ユーザー エクスペリエンスに悪影響を及ぼす可能性があります。 悪影響には、現在のユーザー アカウントにインストールされていなかった、言語、スケール、および DXFL に基づいたリソース パッケージの削除が含まれます。 これらのリソース パッケージが適用可能なコンピューターにこのイメージを展開する場合、ストアまたはサイドローディングを使用して、リソース パッケージを更新としてインストールする必要があります。
対応策??? この問題を回避するには、Windows 8.1 のインストールが完了したら、75 分以内に Sysprep を実行します。 これができない場合は、メンテナンス タスクを無効にします。
Configuration Manager の構築およびキャプチャ タスク シーケンスの一部としてメンテナンス タスクを自動的に無効にするには、[Windows と Configuration Manager のセットアップ] ステップの直後に、次のコマンド ラインを使用して新しい [コマンド ラインの実行] ステップを挿入します。 Schtasks.exe /change /disable /tn “MicrosoftWindowsAppxDeploymentClientPre-staged app cleanup” Schtasks.exe /change /disable /tn “MicrosoftWindowsAppxDeploymentClientPre-staged app cleanup”
Windows 8.1 で Sysprep on を実行するタスク シーケンスにのみ、このステップを追加します。 Windows によって、Sysprep による一般化段階で、メンテナンス タスクが自動的に再度有効になります。

えろす師匠えろす師匠のブログ で書かれていたように、タスクが実行されると、言語が削除されてしまうことが記載されており、回避策としてはインストール後 75 分以内タスクを無効にする必要があります。
また、Sysprep 後はこのタスクの状態が再度有効になりますので、再度同一のイメージで Sysprep をする場合などは起動後にタスクを無効化する必要があります。
このタスクが実行されてしまったかを確認するためには、

  1. タスクスケジューラーの実行状態を確認する
    タスクスケジューラーの状態が [無効] となっている、[前回の実行時間] [前回の実行結果] が設定されているかどうかで、タスクが実行されたかどうかを判断することができます。

image

  • レジストリを確認する
    言語系のレジストリは以下のキーになるようです。

 
[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionAppxAppxAllUserStoreDeletedStaged]
初期の状態ですと、[Deleted] の下に [Staged] というキーがあり、その中にリソースについての情報が格納されています。
タスクが実行されるとキーが削除されるので、ここからも確認をすることができます。
image
image

  • フォルダーを確認する
    リソースパッケージのファイルは [c:Program FilesWindowsAppsDeleted] に格納されているようですので、管理者として実行したコマンドプロンプトで

 

dir "c:Program FilesWindowsAppsDeleted"

を実行して、ディレクトリを確認することで削除されているかを判断することができそうです。
ストアアプリを再プロビジョニングするのは一般では厳しい気がするので、Windows 8.1 のマスターイメージを作成する際には、

Schtasks.exe /change /disable /tn "MicrosoftWindowsAppxDeploymentClientPre-staged app cleanup"

を実行するのは習慣づけておいたほうがよさそうですね。
タスクが実行されてリソースが削除されてしまうと、それを復元するのは難しく、マスターイメージ全体の再作成が必要になってしまうかもしれませんので。
# ストアアプリを使用しない場合は事象が発生しても影響はないかも知れませんが。
Windows Server 2012 R2 でも同様の事象は起きると思うのですが、サーバー OS にはプロビジョニングされたストアアプリは入っていないかと思いますのでこちらでは影響がないのかなと。

Share

Written by Masayuki.Ozawa

3月 6th, 2014 at 10:13 pm

Posted in Windows Client

Tagged with

Leave a Reply