Codexアプリが「プロセスにパッケージ ID がありません」で起動しない(Windows)。exeを直接呼ぶのをやめ、Storeアプリの名前で起動したら通った

運営者

横366ピクセル、縦158ピクセルの小さな窓が出ていました。
中の文字は、英語と日本語が1行ずつです。

ChatGPT failed to start.
プロセスにパッケージ ID がありません。

押せるボタンは Quit だけでした。
ChatGPT は、Windows のスタートメニューでの Codex アプリの名前です。

この窓が出たのは、Codex アプリの exe を、置き場所から直接起動したときでした。
exe は、Windows で動くプログラムの本体のファイルです。
同じ exe に同じ指定を付けたまま、Store アプリの名前で起動し直すと、この窓は出ませんでした。

丸で止まる不具合を調べている途中だった

2026年9月26日の朝、Codex アプリが 26.924.1866.0 に自動更新されました。
その日から、起動のたびに読み込み中の丸で止まるようになっています。
その不具合と、効いた直し方は別の記事に書きました。

調べる途中で、部下役のAIは GPU(画面を描く部品)を使わない起動を試しています。
使ったのは、以前に用意してあった起動用のスクリプトです。
スクリプトは、決まった操作を自動でこなす小さなプログラムのことです。
デスクトップのショートカット2つが、このスクリプトを呼ぶ形になっていました。

中身は、描画用の一時ファイルを脇へよけてから、exe を直接起動するものでした。
起動の部分だけを抜き出し、少し縮めるとこうです。

$package = Get-AppxPackage -Name 'OpenAI.Codex'
$executable = Join-Path $package.InstallLocation 'app\ChatGPT.exe'
Start-Process -FilePath $executable -ArgumentList '--disable-gpu'

--disable-gpu は、GPU を使わずに画面を描かせる指定です。
15時15分に動かすと、スクリプト自体はエラーなしで終わりました。
--disable-gpu 付きの ChatGPT.exe も、プロセスとしては立ち上がっています。
ところが出てきた窓は、冒頭の小さなエラーだけでした。
窓の持ち主は、その ChatGPT.exe 自身です。

更新の前にも同じエラーが出たのかは、記録が無く分かりません。

パッケージIDは、Storeアプリが持つ身分証のようなもの

Codex アプリは、Store からパッケージという包みの形で入っています。
上のスクリプトが使っている Get-AppxPackage は、こうした包みの一覧を出す命令です。
公式の説明では、包みの拡張子は .msix か .appx です。
この包みには、名前や版、発行元などを組み合わせた ID が付いています。
公式の説明では、パッケージ ID はパッケージを1つに見分けるためのもので、5つの部分からできています。

エラー文そのものは、Windows の決まったエラーの1つでした。
公式のエラー一覧では、APPMODEL_ERROR_NO_PACKAGE(15700)にあたります。
説明は「このプロセスにはパッケージ ID がありません。」です。
プロセスは、動いているプログラム1つ分のことです。

exe の置き場所を直接たたくと、Windows は Store アプリとしてではなく、ただのプログラムとして起動するのだと見ています。
そのため、起動したプロセスに ID が付かず、Codex アプリが自分で止まった、という読みです。
ここは推測で、開発元の説明は見つけていません。

Storeアプリの名前で起動すると、同じexeが同じ指定で動いた

Store アプリには、起動用の名前があります。
AUMID(アプリケーション ユーザー モデル ID)と呼ばれるものです。
公式の説明では、Windows はこの名前でアプリを見分けて起動します。
置き場所や表示名とは関係なく、アプリごとに決まっている名前です。

Codex アプリの AUMID は OpenAI.Codex_2p2nqsd0c76g0!App でした。
! の前がパッケージファミリー名、後ろがアプリの ID です。
パッケージファミリー名は、パッケージの名前と発行元からできる文字列です。

15時16分、部下役のAIはこの名前と --disable-gpu を Windows の起動の仕組みに渡しました。
使ったのは IApplicationActivationManager という、Store アプリを起動するための窓口です。

Add-Type @"
using System; using System.Runtime.InteropServices;
[ComImport, Guid("2e941141-7f97-4756-ba1d-9decde894a3d"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IApplicationActivationManager { int ActivateApplication([MarshalAs(UnmanagedType.LPWStr)] string appUserModelId, [MarshalAs(UnmanagedType.LPWStr)] string arguments, int options, out uint processId); int ActivateForFile(IntPtr a, IntPtr b, [MarshalAs(UnmanagedType.LPWStr)] string c, out uint d); int ActivateForProtocol(IntPtr a, IntPtr b, out uint c); }
[ComImport, Guid("45BA127D-10A8-46EA-8AB7-56EA9078943C")] public class ApplicationActivationManager { }
public static class Act { public static uint Run(string aumid, string args) { var m = (IApplicationActivationManager)new ApplicationActivationManager(); uint pid; int hr = m.ActivateApplication(aumid, args, 0, out pid); if (hr != 0) throw new Exception("hr=0x" + hr.ToString("X")); return pid; } }
"@
$pfn = (Get-AppxPackage OpenAI.Codex).PackageFamilyName
[Act]::Run("$pfn!App", "--disable-gpu")

起動したプロセスの命令行を見ると、こうなっていました。

"C:\Program Files\WindowsApps\OpenAI.Codex_26.924.1866.0_x64__2p2nqsd0c76g0\app\ChatGPT.exe" --disable-gpu

動いたのは、さっきと同じ exe に同じ指定です。
違うのは、起動の通り道だけでした。
今度はエラーの窓は出ず、横1858ピクセルの普通の大きさの窓が開いています。
裏では、アプリの部品どうしのやりとりも始まりました。

ただ、画面は読み込み中の丸のままでした。
こちらは丸止まりの不具合のほうで、GPU を切っても変わりません。
エラーの窓が消えたのは、あくまで起動の段階の話です。

公式の説明では、この窓口は指定した Store アプリを起動するもので、アプリに渡す引数も付けられます。
--disable-gpu のような指定を付けたいときは、この形が使えます。

引数が要らないなら、shell:AppsFolder でも起動できる

指定を付けないふだんの起動は、もっと短く書けます。
同じ日に部下役のAIが何度も使った形です。

explorer.exe shell:AppsFolder\OpenAI.Codex_2p2nqsd0c76g0!App

エクスプローラー(Windows のファイルを見る画面)に、AUMID の付いた場所を開かせる書き方です。
15時8分には、これで ChatGPT の窓が出ています。

その直前に、1回だけ失敗していました。
アプリの ID を説明書きのファイル(マニフェスト)から取ったところ、ID が2つ入っていたのです。
App と CodexCoreCommandRunner がつながったまま渡っています。
返ってきたのは The system cannot find the file specified. でした。
このときは explorer.exe も通さず、PowerShell の Start-Process に直接渡しています。
直した版は、explorer.exe を通し、末尾を !App だけにした形です。
2つを同時に変えたので、どちらが効いたのかは分けて試していません。

公式の説明にあるのは、shell:Appsfolder でアプリの一覧を開き、AUMID を表示させる手順までです。
後ろに AUMID を付けて起動する書き方は、僕が使って通ったもので、公式の文書では確かめていません。

自分のパソコンでAUMIDを確かめる

AUMID は、次の命令で出せます。
スタートメニューに出ているアプリの名前と AUMID を並べる命令です。

Get-StartApps | Where-Object { $_.Name -match 'ChatGPT|Codex' }

11月11日に僕のパソコンで打つと、ChatGPT と OpenAI.Codex_2p2nqsd0c76g0!App が出ました。

入っている版やパッケージファミリー名は、こちらで見られます。

Get-AppxPackage *codex* | Select-Object Name, Version, PackageFamilyName

同じ日の結果では、Codex アプリの版は 26.1103.4239.0 に上がっていました。
パッケージファミリー名は9月と同じ OpenAI.Codex_2p2nqsd0c76g0 です。
名前に Runtime と付いた包みも1つ出ましたが、アプリ本体は OpenAI.Codex のほうです。
マニフェストに載っているアプリの ID は、このとき3つありました。
画面のある ChatGPT.exe に当たるのは、App です。

デスクトップのショートカットも付け替えた

9月26日の15時45分、デスクトップのショートカットを付け替えました。
「Codex 安定起動」は、exe を呼ぶスクリプトをやめて、ふだんの起動にしています。
中身は、リンク先が explorer.exe で、引数が shell:AppsFolder\OpenAI.Codex_2p2nqsd0c76g0!App です。
11月11日に開いても、この形のままでした。

同じものを作るなら、PowerShell でこう書けます。

$sh = New-Object -ComObject WScript.Shell
$lnk = $sh.CreateShortcut((Join-Path ([Environment]::GetFolderPath('Desktop')) 'Codex.lnk'))
$lnk.TargetPath = "$env:WINDIR\explorer.exe"
$lnk.Arguments = 'shell:AppsFolder\OpenAI.Codex_2p2nqsd0c76g0!App'
$lnk.Save()

9月26日に動かした中身から、置き場所と名前だけを一般的な書き方に変えています。
11月11日には、最後の Save の手前までを流して確かめました。
デスクトップの場所とリンク先は正しく入りましたが、ファイルは作っていません。

もう1つの「Codex 白画面を修復」は、丸止まりの見張り役を1回だけ動かす形に替えました。
古いスクリプトは消さずに残してあります。
いまの版で exe を直接起動したらどうなるかは、確かめていません。

参考

起動できても丸のまま止まる件は、裏の app-server を止める形で片づけました。
Codexアプリが丸のまま起動しない(Windows)。裏のapp-serverを止めたら開いた

記事URLをコピーしました