症状
Windows11 環境で EAC が起動しない。staring的な画面も出ずプロセスだけが残り続ける状態になる。
調査
EAC 起動時に自動的に読み込まれる AccurateRip.dll が Application Data ディレクトリのパスを取得するために SHGetSpecialFolderLocation を呼んでいるのだが、これが失敗することで正常に起動しない状況となっていた。
SHGetSpecialFolderLocation の引数として CSIDL_APPDATA が指定されているが、これを CSIDL_COMMON_APPDATA に書き換えることでとりあえず起動できるようになった(CSIDL_*の値については 参考ページ1 と 参考ページ2 を参照した)。
以下気づいたことメモ
- CSIDL_LOCAL_APPDATA とかでは起動しない
- MS資料によれば CSIDL_COMMON_APPDATA で
C:\Documents and Settings\username\Application Data
的なパスが取得できるはずだが、実際に取得できているパスはC:\Users\All Users
- Documents and Settings とかかなり昔に滅んでるし、そもそも SHGetSpecialFolderLocation 自体が非推奨らしいので Win11 に来てとうとう動かなくなった、という感じなんだろう
- 手元の環境では7月ぐらいまでは Win11 でも普通に起動していた形跡があるので、それ以降のアップデートで動かなくなったのかなあと想像してる

調査の結果起動するようになった感動のシーン
具体的対応手順
EAC インストールディレクトリにある AccurateRip.dll を適当なバイナリエディタで開き、アドレス 0000BA6F
にある 1A
を 23
に書き換える。

図中選択部を 23 に書き換える