久々にWindows10をクリーンインストールした。ゲームのOriginアプリをインストールしようとしたところ、dllが見つからないエラーでインストールできず、はまったので記録しておく。
必要なDLLが見つからない
エラーはセットアップのexeを実行したときに下記が見つからないというダイアログ。まあ、これ自体は昔からwindowsを触っていれば良くあることではある。
- MSVCP140.dll
- VCRUNTIME140.dll
ググると良く出てくるのが、過去のVisual C++ Runtimeをインストールすることで治るということなので、基本的にはそれをインストールすれば良いはず。
今回見つからないファイルは、~140.dll 。この数字はVCのバージョンに相当している。
Microsoft Visual C++ 2019 (VC++ 14.2), または 2015 (VC++ 14.0)であれば、再頒布可能パッケージに必要なDLLが含まれているらしい。
そこで、2015のx64パッケージをインストール。
最新のサポートされる Visual C++ のダウンロード (microsoft.com)
しかし、直らず。
先に結論
起動しようとしている実行ファイルが、x86版かx64版かで必要なパッケージが異なる。
起動するファイルに合わせて必要な方をインストールする必要がある。
気づいて調べてみると色々なところに書いてあるが、64bitマシンなら、わからなければ両方入れておくのが無難っぽい。
気づくまでの過程は後述するが、これに気付かずしばらくはまった。
気づくまでの原因調査
上述のとおり、このときはx64版のインストールだけで治らなかったので、少し詳しく調べてみた。
基本的に、アプリケーション実行時に必要なDLLは、環境変数のPATHから探すようになっている。
確認したところWindows\system32には必要なDLLファイルは入っていた。なのに認識しない。
そこで、アプリケーションが依存するDLLを調べてみることにした。
(Dependency Walkerというフリーソフトを見つけた Dependency Walker (depends.exe) Home Page )
調べたところ、確かに依存するDLLは存在することになっている。
が、本体のEXEファイルだけはx86バイナリ(32bit版)であることに気が付いた。
(Originのダウンロードサイトにはそのあたりの説明がない)
※余談:Microsoftのドキュメントには、同様の別のアプリケーションが紹介されていた(3rd party)。が、これの動作にVCランタイムが必要というなんともニワトリタマゴな話。
- Visual C++ アプリケーションの依存関係の理解 | Microsoft Docs
- GitHub – lucasg/Dependencies: A rewrite of the old legacy software “depends.exe” in C# for Windows devs to troubleshoot dll load dependencies issues.
x86版インストールで解決
x86(32bit)版もインストールしたところ、無事起動した。
気づけばなんということもなかった。
コメント