Windows Server 2019 や Windows Server 2022 でコマンド プロンプトが異常終了する問題

Last Update: feedback 共有

※ 本記事はマイクロソフト社員によって公開されております。


こんにちは。 Windows プラットフォーム サポート担当のロベルトです。

本記事では、Windows Server 2019 や Windows Server 2022 でコマンド プロンプト(以降 cmd.exe と記述します)が、異常終了する問題と回避方法ついてご紹介します。

事象


コンソール プログラムを繰り返し実行すると稀に conhost.exe が例外コード 0xC0000142 で異常終了し、それに伴い cmd.exe も異常終了するという問題が報告されております。

原因


1 つのバッチ ファイルなどのコンソール プログラムから並行して同時にコマンドを実行すると、複数の cmd.exe が起動します。これらの cmd.exe から同時に コンソール出力を行うと、 1 つの conhost.exe に対して、コンソール出力の要求が発生し、稀にコンソール出力の競合が発生してしまう場合があります。

このような競合が発生すると conhost.exe が、誤った情報を参照し、異常終了をしてしまいます。また、conhost.exe が異常終了してしまうと cmd.exe も正常に処理できず、異常終了をしてしまいます。

弊社での対応状況


本問題については、2023 年 5 月 9 日(米国時間)に公開された以下の更新プログラムに修正が含まれております。ご利用の環境にて本問題が発生している場合には、以下の更新プログラム以降を適用いただくことで、事象が解消されます。

なお、2023 年 2 月 14 日(米国時間)以降に公開された更新プログラムを適用し、専用のグループ ポリシーで本問題への修正を手動で有効化した環境については、上記の更新プログラムを適用するとポリシーの設定が「無効」であったとしても修正が適用されます。専用のグループ ポリシーをアンインストールする必要はありませんが、更新プログラムの適用後は、「有効」と「無効」を制御することはできません。

回避策


この問題は、cmd.exe の設定を変更することで回避が可能です。また、バッチ ファイルをご利用の場合は、cmd.exe の設定を変更せずとも、バッチ ファイルを変更することで回避が可能です。

cmd.exe の設定を変更する方法

以下の手順でコンソール モードを変更することで、回避できます。

  1. コマンド プロンプトを起動します。
  2. 左上のアイコンをクリックし、 [既定値] を選択します。
  3. [オプション] タブを開き、 [レガシー コンソールを使用する(再起動が必要で、すべてのコンソールに影響します)] をチェックします。
  4. [OK] をクリックします。
  5. すべての cmd.exe を再起動します。

上記の手順で cmd.exe の既定のコンソール モードは変更されますが、既にショートカット ファイル毎に設定を変更している場合は、設定が反映されません。その他場合は、対象の cmd.exe のショートカット ファイルを起動後、手順 2 で、[プロパティ] を選択し、以降の手順を実施ください。

なお、この設定の留意点として、一部で UTF-8 の処理が行われなくなるため、文字化けに関する問題が発生する可能性があります。

レガシー コンソールの概要については、こちらの公開情報をご参照ください。

バッチファイルを変更する方法

バッチ ファイルから複数のコマンドを同時に実行する方法としては、start コマンドに /b オプションを使用します。 /b オプションを利用すると新しいウィンドウを生成をしないため、コンソール出力は、1 つの conhost.exe が処理し、並行して複数コマンドが実行するため、この問題の発生条件を満たしてしまいます。

このため、start /b を使用しなければ、回避できます。

また、start /b の代替の方法として、cmd.exe /k を使用する方法があります。cmd.exe /k を使用すると新しいウィンドウを生成せず、バッチ ファイルがシーケンシャルに実行するため、本問題の発生条件を満たしません。ただし、並行して実行されないため、すべてのコマンドが完了するまで、時間を要することがあります。

もし、処理時間を優先して実行する場合は、start コマンド (/b なし) を使用します。start コマンド (/b なし) を使用すると新しいウィンドウを生成して、ウィンドウ毎に conhost.exe が起動するため、この問題の発生条件を満たしません。

まとめますと、以下の方法のいずれかで回避することができるため、ご利用の方法に合わせて、代替方法をご検討ください。

start /b の代替となる起動方法 新しいウィンドウの作成有無 並行実行の有無
start (/b なし) 新しいウィンドウを作成する 並行して実行される
cmd.exe /k 新しいウィンドウを作成しない 並行して実行されない

本情報の内容(添付文書、リンク先などを含む)は、作成日時点でのものであり、予告なく変更される場合があります。