Tauri アプリケーションのビルド後の起動時に、以下のエラーが発生し、プログラムが即座に終了する現象が発生した。
0xc0000139 (STATUS_ENTRYPOINT_NOT_FOUND)広範な調査の結果、以下の要因による ABI (Application Binary Interface) 衝突 であることが判明した。
PATH の汚染と、ビルド時のアーキテクチャ誤認Windows の DLL ロード順序において、アプリケーション自身のディレクトリに DLL が見つからない場合、システムは PATH を探索する。
PATH の先頭付近に MinGW (GNU) ベースのツールチェーンが含まれていた(具体的には text-generation-webui の環境)。WebView2Loader.dll や sqlite3.dll を探す際、PATH にある MinGW 版を誤ってロードしてしまった。同名でも内部構造やエクスポート関数が異なるため、「エントリポイント未発見」でクラッシュしていた。
システム PATH 内の予期せぬ競合:
C:\Program Files (x86)\Windows Kits\10\Windows Performance Toolkit\ に存在する WebView2Loader.dll がロードされていたことが判明した。0xc0000139 クラッシュを引き起こしていた。ビルドプロセスでのアーキテクチャ誤認:
target/debug/build 内の x86 版 WebView2Loader.dll を優先して拾ってしまい、バイナリ(x64)の隣に不適切な DLL を置いていたことも二次的な要因となっていた。環境変数 PATH の手動クリーンアップに頼らず、ビルドプロセス自体を「自己完結型(Hermetic)」にすることで、根本的に問題を解決した。
DLL 自動集約ロジック (build.rs)
target ディレクトリ全体をスキャンし、MSVC ビルド環境が生成した正しい WebView2Loader.dll を自動的に発見。.exe と同じディレクトリに物理的にコピーする。これにより、OS 起動時に PATH を見に行く前に、隣にある正しい DLL を確実に読み込ませる。SQLite のスタティックリンク強制
Cargo.toml で rusqlite と libsqlite3-sys の bundled フィーチャーを有効化。sqlite3.dll への依存を完全に排除。リソース準備スクリプトの最適化
prepare-resources.cjs から不要な sqlite3.dll の混入を防止するガードを追加。sequenceDiagram
participant OS as Windows OS Loader
participant Exe as telos-db.exe
participant Local as App Directory (.dll)
participant Path as System PATH (MinGW)
rect rgb(200, 255, 200)
Note over OS, Local: 現在の解決策 (明示的)
OS->>Exe: 起動開始
OS->>Local: 隣にある DLL を確認
Local-->>OS: MSVC版 DLL を提供 (Match!)
OS->>Exe: 正常起動
end
rect rgb(255, 200, 200)
Note over OS, Path: 以前の失敗 (環境依存)
OS->>Exe: 起動開始
OS->>Local: 隣に DLL がない
OS->>Path: PATH を探索
Path-->>OS: MinGW版 DLL を提供 (ABI Conflict!)
OS->>Exe: 0xc0000139 クラッシュ
end
本対応により、開発環境の PATH 設定がどのような状態であっても、一貫して正しく動作する「自己完結型」の堅牢なアプリケーション基盤が確立された。