プロセス モニターを使用して、起動に失敗するアプリをトラブルシューティングする
この記事では、プロセス モニター ツールをインストールして、Modern、Inbox、および Microsoft Store Apps の起動に失敗する問題のトラブルシューティングを行う方法について説明します。
Process Monitor ツールをダウンロードします。 プロセス モニター ツールがローカルにダウンロードされたら、ファイルを抽出します。
イベントのキャプチャ
プロセス モニター トレースをキャプチャするには、管理者特権で実行します (管理者として実行)。
Note
プラットフォーム (x86 システムの場合はProcmon.exe 、X64 システムの場合は Procmon64.exe 、ARM の場合は Procmon64a.exe ) に一致するプロセス モニターのバージョンが実行されていることを確認します。
開始したら、以前に保存したフィルターを既定値にリセットして、以前に設定したフィルターによって潜在的なイベントが除外されないようにします。 プロセス モニターを初めて実行する場合、またはフィルターが設定されていない場合は、ポップアップ ウィンドウなしで記録を開始できます。
既定では、記録は自動的に開始されます。 ただし、次のアイコンを選択すると、実行されていることを確認できます。
または、Ctrl + E を押すか、File メニューから Capture Events を選択して記録を開始することもできます。 ステータス バーに記録されたイベントは、次のように表示されます。
または、グラフィカル ユーザー インターフェイス (GUI) がオプションではない場合、またはシステムがコンソール アクセスでのみリモートでアクセスできる場合は、Windows PowerShell またはコマンド プロンプトを使用して問題をトレースできます。 例えば次が挙げられます。
C:\ProcessMonitor>procmon64.exe -accepteula -backingfile C:\ProcessMonitor\Recording.pml -quiet -minimized
フィルター処理や最大ファイル サイズの設定など、その他のオプションを使用できます。 詳細については、「 Process Monitor」を参照してください。
トレースを終了して保存するには、次のコマンドを使用します。
C:\ProcessMonitor>procmon64.exe -terminate -quiet
さらに、PowerShell または PsExec ツールを使用してプロセス モニターをリモートで実行。 例えば次が挙げられます。
C:\PSTools>psexec.exe -sd \\<Computer Name> C:\ProcessMonitor\procmon64.exe -accepteula -backingfile C:\ProcessMonitor\Recording.pml -quiet -minimized
記録を停止するには、次のコマンドを使用します。
C:\PSTools>psexec.exe -sd \\<Computer Name> C:\ProcessMonitor\procmon64.exe -terminate -quiet
イベントの保存と保存
イベントを格納および保存するには、いくつかの方法があります。 File メニューから Backing files を選択できます。 次に、イベントを格納する 2 つのメソッドを確認できます。
- 仮想メモリを使用する
- 名前付きファイルを使用する
仮想メモリを使用する
このメソッドは、ユーザーが手動で保存するまで、システムのメモリを使用してファイルを格納します。
Note
仮想メモリに基づくプロセス モニターを長時間実行すると、プロセス モニターが使用可能なすべてのシステム仮想メモリを消費する可能性があり、システムが応答を停止する可能性があります。
として記録を開始する場合はプロセス モニターを終了する前に記録を保存する必要があります。
[すべてのイベント 選択し 形式が Native Process Monitor Format (PML)として設定されていることを確認します。 記録にすべてのイベントが含まれていない場合は、表示または強調表示されたイベントのみを分析に使用できるため、不十分な可能性があります。
ファイルに基づく
この方法では、ファイルを使用して記録を保存し、プロセス モニターを終了する前にファイルを手動で保存する必要はありません。
Note
ファイルの最大サイズが定義されていない場合、プロセス モニターを実行する時間が長すぎると、プロセス モニターで使用可能なすべてのシステム ディスク領域が消費され、システムが応答を停止する可能性があります。
プロセス モニターが設定され、記録が開始されたら、問題を再現する必要があります。
トラブルシューティングの例
この問題を例として取り上げます。機能していない電卓アプリケーションがあります。 まず、上記のいずれかの方法でプロセス モニターの記録を開始します。 次に、アプリケーションを起動して問題を再現します。 問題が再現されたら、プロセス モニターの記録を停止し、データを保存します。
記録されたプロセス モニター トレースを分析するには、プロセス モニターで開きます。 メニューの Tools の下にある Process Tree を選択して、記録中にアプリケーションが起動するかどうかを確認します。
電卓プロセスを選択します。
プロセスに焦点を当てるには、アプリケーション名を右クリックし、 フィルターを含めるプロセスの追加を選択します。
同様に、プロセス ID のフィルターを手動で追加することもできます。
プロセス ツリービューを終了するか、Process Monitor フィルターウィンドウで OK を選択して、プロセスを含むフィルター処理されたキャプチャされた行を表示します。 この例では、 Calculator.exe プロセスが開始されています。
次に、プロセス キャプチャの最後に進み、Process Exit イベントの直前にある Thread Exit イベントのグループを探します。
WerFault.exeの Process Create イベントも表示できます。 その時点で、アプリケーションは既に回復不可能な条件に達しており、既定のエラー ハンドラーを呼び出しています。
また、アプリケーションのクラッシュに関連する一部のイベント ログも記録されていることにも注意してください。
この行から始めて、Access Denied Results イベントを見つけることができるかどうかを確認できます。
このような場合は、次のレジストリ キーのアクセス許可と作業マシンのアクセス許可を確認して、いくつかの違いがあるかどうかを確認する必要があります。
\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders
この例では、 すべてのアプリケーション パッケージ に、 User シェル フォルダーからの "読み取り" アクセス許可がありません。
この操作は、PowerShell またはコマンド プロンプトを使用して行うこともできます。
作業システムの場合:
非稼働システムの場合:
疑わしい可能性がある近くのアクセス許可の問題が見つからない場合は、疑わしいアクセス許可ブロックがないか、トレース全体を常に確認できます。 まず、Filter メニューの [フィルターの設定を選択して、電卓プロセスのフィルター削除します。 次に、Tools メニューから Count Occurrences オプションを選択します。 ドロップダウン メニューから結果 Result を選択し、 Count を選択できます。
フィルター処理が完了したら、[アクセスが拒否されました] 行をダブルクリックして、フィルター処理されたイベントを表示できます。
一覧を操作する場合は、すべての "アクセスが拒否されました" という結果によってコードが失敗するわけではありません。
一般に、"すべてのアクセス" を要求するものは拒否されることが多いため、調査から除外できます。 次のように、 Desired Access: All Access を含むイベントをフィルター処理することで、自動的に行うことができます。
この例では、結果は次のようになります。
"すべてのアプリケーション パッケージ" に適切なアクセス許可を追加すると、両方のアプリケーションで両方の問題が同時に解決されます。
アプリケーションの起動を停止しているアクセス許可の変更を解決できない場合があります。 プロセス モニターは、プロセス アクティビティの一部のみをキャプチャします。
多くのマシンが同じ問題の影響を受ける場合は、新しくインストールされた新しいマシンから開始し、アプリケーションの再起動に失敗するまでポリシーをゆっくりと追加して、トラブルシューティングを行います。
影響を受けるコンピューターが 1 つだけの場合は、コンピューターを回復またはリセットします。 影響を受けるユーザーが 1 人だけの場合は、ユーザーのプロファイルを再作成します。