web-dev-qa-db-ja.com

Visual Studio 2015 C ++再頒布可能DLLをアプリケーションにバンドルできますか?

Microsoft Visual Studio 2015 Community Editionを使用してC++アプリケーションを作成しました。 Visual Studio 2015のVisual C++再頒布可能パッケージ が前提条件であることを確認するために、Advanced Installerを使用しています。

ただし、再頒布可能パッケージのインストーラーは完全ではありません。一部のユーザーは、再配布可能なインストーラーがハングするか、それが指示されたときにインストールに失敗すると報告し、ユーザーは「このプログラムはMSVCP140.dllがコンピューターにないため起動できません」というエラーを受け取ります。

マイクロソフトによると、 推奨されていませんが、再配布可能なDLLをアプリケーションと一緒にパッケージ化できます:

再配布可能なVisual C++ファイルを展開するには、Visual Studioに含まれているVisual C++再配布可能パッケージ(VCRedist_x86.exe、VCRedist_x64.exe、またはVCRedist_arm.exe)を使用できます。 ...再実行可能なVisual C++ DLLをアプリケーションのローカルフォルダーに直接インストールすることもできます。これは、実行可能なアプリケーションファイルが含まれるフォルダーです。サービス上の理由から、このインストール場所を使用することはお勧めしません。

C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\redist\x64\Microsoft.VC140.CRTには4つのファイルがあります。それは、インストールプロセス中にそれらをアプリケーションのディレクトリにコピーするだけでよいということですか?

  • MyApp.exe
  • concrt140.dll
  • msvcp140.dll
  • vccorlib140.dll
  • vcruntime140.dll

これでいいですか?ライセンスを表示する必要がありますか?再配布可能ファイルの別のプレインストールを要求する代わりに、これを行う人が増えないのはなぜですか?

32
a paid nerd

C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\redist\x64\Microsoft.VC140.CRTには4つのファイルがあります。それは、インストールプロセス中にそれらをアプリケーションのディレクトリにコピーするだけでよいということですか?

はい、引用した段落はまさにそれを意味します。

これでいいですか?ライセンスを表示する必要がありますか?再配布可能ファイルの別のプレインストールを要求する代わりに、これを行う人が増えないのはなぜですか?

技術的には、これで問題ありません。それについて熱心になりたい場合は、readmeまたはhelp/aboutにメモを含めて、Microsoftの明示的に許可されているVC++ 2015 redistributables provided in "local deployment" modeVisual C++での展開

より多くの人々がそれをしない理由について、私はそれを推測します(まったく気にする人の間で):

  • MyApp.exeのような単一モジュールアプリの場合、外部の依存関係を排除するために、静的にリンクされたすべてのものを使用してビルドする方が簡単です。
  • notこれらのファイルを含めると、ディストリビューション(おそらくダウンロード)サイズから1 MB以上節約できます。
  • ランタイムのプライベートコピー("local deployment")で実行すると、更新の責任がメンテナーに移ります。そのため、クリティカル/セキュリティ修正の場合、"central deployment"とは対照的に、パッケージをタイムリーに再発行する必要があります。 Windows Updateを介して配信される可能性があり、良い悪い点の両方を伴う可能性があります。
16
dxiv

前提条件インストーラーに問題がある場合は、再配布可能ファイルをマージモジュールとしてインストールするオプションもあります。同じMSDNの記事が言及しているように:

別のオプションは、再配布可能なマージモジュール(.msmファイル)を使用することです。これは、Program Files [(x86)]\Common Files\Merge Modulesにあります。

マージモジュールを使用すると、ファイルを手動で追加するよりもはるかにクリーンなオプションになります。ファイルは、なぜそこにいるのかわからない別の同僚によって誤って削除されたり、ファイルの1つがインストールされなかったりすることがあります。

Advanced Installerのすべてのエディションには、無料版を含むマージモジュールを含めるサポートがあります。

2
Bogdan Mitrache