症状
Windows11 環境で EAC が起動しない。starting的な画面も出ずプロセスだけが残り続ける状態になる。
調査
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
に書き換える。