web-dev-qa-db-ja.com

Visual Studio2015で開発されたC ++ exeをWindows7に展開するための再配布可能ファイル

Visual Studio 2015(Windows 10)を使用して32ビットC++アプリケーションを開発しました。 Windows7以降を実行しているマシンに展開したいと思います。

私はWiXインストーラーをまとめ、説明されているようにVC++再配布可能マージモジュールを含めました ここ 。私が含めたマージモジュールはC:\Program Files (x86)\Common Files\Merge Modules\Microsoft_VC140_CRT_x86.msmでした。

このインストーラーは正常に動作しているように見えますが、Windows 7では、インストールされたプログラムは実行されず、api-ms-win-crt-runtime-l1-1-0.dllがないことを訴えます。

検索から、再配布可能なパッケージvc_redist.x86.exe from here に余分なファイルがあるのではないかと思いますが、WiXのドキュメントではexeではなくmsmを使用するように指示されています。

マージモジュールのインストールに失敗した可能性もあります。エラーは見られませんでしたが、その可能性を確認するためにログを有効にして再実行していません。

別のオプションはburnを使用することかもしれませんが、私はこのツールに精通していません。それが正しい場合はそのルートを使用しますが、可能であればMSIを使用したいと思います。

17
Peter Hull

Visual Studio 2015では、VC++ランタイム再配布可能ファイルがより複雑になりました。ユニバーサルCRTについては VCチームのブログ投稿 を参照してください。基本的に、マージモジュールでは不十分です。

ユニバーサルCRTのマージモジュールはありません。現在CRTマージモジュールを使用していて、Visual C++ライブラリを一元的に展開したい場合は、上記のWindowsUpdateパッケージまたはVCRedistに移動することをお勧めします。または、UniversalCRTおよびVisualC++ライブラリに静的にリンクすることを選択することもできます。

11
Bob Arnson

MSIパッケージがMSI Error 1618: 'Another installation is already in progress' during installation/uninstallation.で再配布可能ファイルをインストールできないという問題が発生しました。Bootstraperを使用してWIXで再配布可能2015をインストールしました。例えば:

<Chain>
  <!-- Microsoft Visual C++ 2015 x86 libraries -->
  <ExePackage Cache="no" Compressed="yes" PerMachine="yes" Permanent="yes" Vital="yes"
     SourceFile="EXAMPLE_PATH\vc_redist.x86.exe" InstallCommand="/install /passive /norestart">
  </ExePackage>

  <MsiPackage Id="MainPackage" SourceFile="YOUR_MSI_PACKAGE.msi" DisplayInternalUI="no" Compressed="yes" Vital="yes"/>
</Chain>
3

ユニバーサルCランタイムDLLをアプリケーションと一緒に配布できるようになったことは注目に値します。 MSDNブログ投稿 手順について説明します。

  1. Windnows 10 SDKをインストールします
  2. C:\Program Files (x86)\Windows Kits\10\Redist\ucrtに移動し、対象のプラットフォームのDLLを見つけます
  3. それらをアプリケーションのプログラムディレクトリにコピーします

彼らは大きくありません。合計で約2メガバイト。

私はこのテクニックを使用することになりました:

  • 別のWiXパッケージを作成してからbootstrapそれら;
  • ユーザーが追加のインストーラーを実行する必要はありません

すべてのコンピューターで動作するかどうかはわかりませんが、テストしたコンピューターでは動作します。

2
Owen