もくじ
https://tera1707.com/entry/2022/02/06/144447
やりたいこと
C++で作ったアプリを、まっさらなクリーンインストールしたWindowsで動かしたときに、
vcruntime140.dllがないmsvcp140.dllがない
というエラーが起きて、アプリがクラッシュした。
で、その対策として、MSの下記のようなページから、
- vc_redist.x64.exe
- vc_redist.x86.exe
をダウンロードして、対象のPCにインストールすると、動くようになる、というのは知っていた。
ダウンロード先
ただ今回、いろんな事情で、それらをインストールしてやることができなかった。
代わりに、vc_redist.x64.exeやvc_redist.x86.exeをインストールしたときに入るvcruntime140.dllのようなファイルを、必要な分(dll)だけ手でコピーして、対象PCの、自分のアプリのexeと同じ階層に配置してやろうと思った。
が、手でコピーするにも、
- どこにあるファイルをコピーするのが正しいのか?
- そもそもそういうことをしてもいいのか?
がわからなかった。
それっぽいドキュメントが下記にあったので、そこを頑張って熟読し、どういうことができるか調べたい。
結論
今回の結論として、
vcruntime140.dllなどのisonファイルを手でコピーしてアプリのexeと同じ階層において使うのはアリ- 推奨は、
vc_redist.x64.exeやvc_redist.x86.exeで「Central Deploy」すること- その場合、WindowsUpdateで依存ファイルを更新することができる
- 手でコピーする際のコピー元としては、開発者コマンドプロンプトで
%VCINSTALLDIR%Redist\MSVC\と打つとでるフォルダがよい- 私の自宅PCだと、VS2022 Communityなので下記だった(x64アプリの場合)
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Redist\MSVC\14.44.35112\x64
- 私の自宅PCだと、VS2022 Communityなので下記だった(x64アプリの場合)
%VCToolsRedistDir%がよいかも- 私の自宅PCだとこうだった(最終的に、👆と同じフォルダ近辺を指すのだが)
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Redist\MSVC\14.44.35112\
- 私の自宅PCだとこうだった(最終的に、👆と同じフォルダ近辺を指すのだが)
- それらのフォルダにある、一番新しいVSバージョン、MSVCバージョンのdllファイルで、プラットフォーム等が一致するものを使うのがよい
調べたことメモ
VCの再頒布可能パッケージは、👇のようなMSのダウンロードページからダウンロードできるが、
https://www.microsoft.com/ja-jp/download/details.aspx?id=48145
VisualStudio 2022、2019などをインストールすると、そのバージョンにあった「再頒布可能パッケージ」のインストーラーと、そこに含まれるdllなどのファイルが一緒にPCにインストールされている。
ここでいう「再頒布可能パッケージ」というのは、vc_redist.x64.exeやvc_redist.x86.exeの、再頒布可能ファイルをすべて一括でインストールしてくれるもの。
ここでいう「そこに含まれるdllなどのファイル」というのは、vcruntime140.dllやmsvcp140.dllなどのファイル。
VisualStudioと一緒にインストールされる再頒布可能パッケージは、そのVSに対応する「開発者コマンドプロンプト」で、
explorer %VCINSTALLDIR%Redist\MSVC\
を実行すると開くフォルダに置かれている。
自宅PCだとこうだった。
![]()
もしくは、
explorer %VCToolsRedistDir%
の方がよいかも。
自宅PCだとこうだった。

この辺に書かれてる。
そこに置かれてるフォルダの命名ルールはこのあたり。
https://learn.microsoft.com/en-us/cpp/windows/determining-which-dlls-to-redistribute?view=msvc-170
再頒布ファイル一覧のほうに、具体的にどのファイルが再頒布可能なのか、の説明があった。

https://learn.microsoft.com/ja-jp/visualstudio/releases/2022/redistribution#visual-c-runtime-files
ただし、デバッグビルド用のファイルは再頒布できないとのこと

https://learn.microsoft.com/en-us/cpp/windows/determining-which-dlls-to-redistribute?view=msvc-170
今回、足りなくてアプリが起動しなかったファイルはvcruntime140.dllだったので、下記にあった。
%VCINSTALLDIR%Redist\MSVC\14.44.35112\x64\Microsoft.VC143.CRT もしくは %VCToolsRedistDir%x64\Microsoft.VC143.CRT 実際のパスは C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Redist\MSVC\14.44.35112\x64\Microsoft.VC143.CRT
こんな感じ

再頒布可能パッケージは、👇からダウンロードできる。
https://learn.microsoft.com/ja-jp/cpp/windows/latest-supported-vc-redist?view=msvc-170

→👆のページからの飛び先

2015以降は同じものを使うことになるが、ダウンロードしたvc_redist.x64.exeやvc_redist.x86.exeには、その時の最新のdllが含まれる。
再頒布するときの再頒布可能パッケージ/ファイルは、
開発に使用したVisualStudioのバージョンと同じかより新しいものを使う。
例えばVS2019を使ってビルドされたアプリで 2017 の再頒布可能ファイルを使用することはできない。

https://learn.microsoft.com/en-us/cpp/windows/determining-which-dlls-to-redistribute?view=msvc-170
vc_redist.x64.exeやvc_redist.x86.exeでCentral Deployせず、dllを個別に、自分のアプリに含めることもOK。
ただし、👇のようなことが起きるかもよ。とのこと。
個別のファイルの説明があった。
なるほど、今回のvcruntime140.dllは、「通常の C および C++ 言語の起動および終了サービスを使用するアプリケーション」で必要になるらしい。

https://learn.microsoft.com/en-us/cpp/windows/determining-which-dlls-to-redistribute?view=msvc-170
、、、という調べた内容をまとめると、上の結果になった。
調べたこと その2
今回の問題にはあまり関係ないのだが、CentralDeploy以外に、「マージモジュール」というのを使って再頒布可能ファイルを対象PCにインストールできるっぽい。
ただしこれもMS非推奨とのこと。
あまり詳しく調べてないが、vc_redist.x64.exeやvc_redist.x86.exeのCentral Deployだと、再頒布可能ファイルが「全部」一気にインストールされ、それらはWindowsUpdateの仕組みでUpdateできるが、マージモジュール方式だと、機能単位?で再頒布可能ファイル群をインストールできる、ただしWindowsUpdateでUpdateはできないらしい。
機能単位は、おそらく👇のフォルダの単位っぽい。

VisualStudioインストーラーの「C++ 2022 再頒布可能パッケージMSM」をインストールすると、使えるようになるらしい。

※ただ、使わなさそうなのでこれは今は調べないでおく。使うときに調べる。
参考
Visual C++ ファイルの再配布
「再頒布可能DLLをアプリケーションローカルフォルダに直接インストールすることも可能」と書かれてる
https://learn.microsoft.com/en-us/cpp/windows/redistributing-visual-cpp-files?view=msvc-170
再配布する DLL の決定
なにを再頒布してよいのか?の一覧
Visual C++での展開
展開の種類の説明(Central Deploy、Local、StaticLinkなど。。。)
https://learn.microsoft.com/en-us/cpp/windows/deployment-in-visual-cpp?view=msvc-170
再頒布可能コード(vs2022)
※同様のページが、各VisualStudioにある。(2019、2017、2015・・)




