Visual Studio 2017 で Visual C++ “14” ランタイム ライブラリをインストーラーに含めた場合に発生する問題について

こんにちは、Visual Studio サポート チームです。

今回は Microsoft Visual Studio 2017 に含まれる Visual C++ "14" ランタイム ライブラリを必須コンポーネントに含めてインストーラーを作成する場合に発生する可能性がある問題と対処方法をご案内いたします。

<2017 年 7 月 4 日追記>
Product.xml に指定する Product 属性の内容につきましては、Visual Studio 2017 RTMに対する値でのご案内となっております。
ダウンロード ページから入手していただける最新の Visual C++ 2017 Redistributable のバージョンに対する Product 属性の値につきましては、現在正しい値を確認中です。
確認の結果が得られ次第この記事にてご案内いたしますので、大変恐れ入りますが今しばらくお待ちください。

<2017 年 7 月11 日修正>
Visual C++ "14" ランタイム ライブラリのインストーラーの入手先に関する記述を修正しました。

 

現象

a) [アプリケーションと同じ場所から必須コンポーネントをダウンロードする] を指定して Visual C++ "14" ランタイム ライブラリを必須コンポーネントに指定した場合、発行時にエラーが発生する。

b) Visual C++ "14" ランタイム ライブラリが既にインストールされているにも関わらず、インストーラーの実行時にランタイム ライブラリのインストールが求められる。

これらの現象は、ClickOnce アプリケーションの発行や、Microsoft Visual Studio 2017 Installer Projects 拡張機能を使用してセットアップ プロジェクトのビルドを行い setup.exe を生成する場合に発生します。

 

原因

この現象は、Visual Studio 2017 のインストールで同時にインストールされる Visual C++ "14" ランタイム ライブラリのブートストラップ パッケージに含まれる Product.xml ならびに Package.xml に誤りがあるために発生します。

現象 a) は、Product.xml の PackageFile 要素に指定されている Name 属性と PublicKey 属性の値に誤りがあり、Visual C++ "14" ランタイム ライブラリのインストーラーと異なっていることが原因です。

現象 b) は、Product.xml の MsiProductCheck 要素に指定されている Product 属性の値に誤りがあり、Visual C++ "14" ランタイム ライブラリのインストーラーのプロダクト コードと異なっていることが原因です。

 

対処策

Product.xml ならびに Package.xml の各設定を修正してください。

変更手順 :

1. Product.xml、Package.xml のバックアップを作成しておきます。各ファイルは既定で以下の場所に配置されます。

x86 版
Product.xml : <インストール ルート>\Bootstrapper\Packages\vcredist_x86\

x64 版
Product.xml : <インストール ルート>\Bootstrapper\Packages\vcredist_x64\

2. メモ帳などのエディタで各 xml ファイルを開き、以下の箇所を変更してファイルを保存します。 " ※ 1" と記載している箇所については後述します。

 

Product.xml (x86 版)

変更前

<!-- Defines list of files to be copied on build -->  <PackageFiles CopyAllPackageFiles="false">    <PackageFile Name="vcredist_x86.exe" HomeSite="VCRedistExe" PublicKey="3082010a0282010100ee5bbe7d1124e38606e066ff48b517bd02e4b40c32f0723e7d2e87d74ea1b1a7432ff7659e31e1323145aed7c1248421d72eb5847efa35d3531cd7b6511e4fce66b9ebb70c02fd295cada887f6ca22b4d5bf0875f58a708f63d7ef8a1ee98f4324645ad3877d906d3bac76cd57367de8bc1056ac98f0895d2e64c6af26095e1e6315f13dbf168f998802c330b7c10b601f0f72ccd6b7a83512869ba10b0ae6935b8efa549cc1f3195f428d129f1d3f90b72713831932821df3d987d421b23ca2b6074fd724aaee8df5b3d9faf9394fa7e9f2af5952f4dc419b2f117063ddeadeaaf16d2104105333bbb24fc5e153b24165476e37f6bce99b1641916b2e5b30c30203010001" />  </PackageFiles>  <InstallChecks>    <MsiProductCheck Property="VCRedistInstalled" Product=" {7AACE5DC-CD5D-3856-A333-DCC0872AA88C} "/>  </InstallChecks>  <!-- Defines how to invoke the setup for the Visual C++ 14.0 redist -->  <Commands Reboot="Defer">    <Command PackageFile="vcredist_x86.exe" Arguments=' /q:a '>

変更後

  <!-- Defines list of files to be copied on build -->  <PackageFiles CopyAllPackageFiles="false">    <PackageFile Name="vc_redist.x86.exe" HomeSite="VCRedistExe" PublicKey=" ※ 1" />  </PackageFiles>  <InstallChecks>    <MsiProductCheck Property="VCRedistInstalled" Product=" {C6CDA568-CD91-3CA0-9EDE-DAD98A13D6E1} "/>  </InstallChecks>  <!-- Defines how to invoke the setup for the Visual C++ 14.0 redist -->  <Commands Reboot="Defer">    <Command PackageFile="vc_redist.x86.exe" Arguments=' /q:a '>

 

Product.xml (x64 版)

変更前

  <!-- Defines list of files to be copied on build -->  <PackageFiles CopyAllPackageFiles="false">    <PackageFile Name="vcredist_x64.exe" HomeSite="VCRedistExe" PublicKey="3082010a0282010100ee5bbe7d1124e38606e066ff48b517bd02e4b40c32f0723e7d2e87d74ea1b1a7432ff7659e31e1323145aed7c1248421d72eb5847efa35d3531cd7b6511e4fce66b9ebb70c02fd295cada887f6ca22b4d5bf0875f58a708f63d7ef8a1ee98f4324645ad3877d906d3bac76cd57367de8bc1056ac98f0895d2e64c6af26095e1e6315f13dbf168f998802c330b7c10b601f0f72ccd6b7a83512869ba10b0ae6935b8efa549cc1f3195f428d129f1d3f90b72713831932821df3d987d421b23ca2b6074fd724aaee8df5b3d9faf9394fa7e9f2af5952f4dc419b2f117063ddeadeaaf16d2104105333bbb24fc5e153b24165476e37f6bce99b1641916b2e5b30c30203010001" />  </PackageFiles>  <InstallChecks>    <MsiProductCheck Property="VCRedistInstalled" Product=" {83BAF6AE-E65F-3FA7-8DE5-BF65A60FA3C2} "/>  </InstallChecks>  <!-- Defines how to invoke the setup for the Visual C++ 14.0 redist -->  <Commands Reboot="Defer">    <Command PackageFile="vcredist_x64.exe" Arguments=' /q:a '>

変更後

  <!-- Defines list of files to be copied on build -->  <PackageFiles CopyAllPackageFiles="false">    <PackageFile Name=" vc_redist.x64.exe " HomeSite="VCRedistExe" PublicKey=" ※ 1" />  </PackageFiles>  <InstallChecks>    <MsiProductCheck Property="VCRedistInstalled" Product=" {8D50D8C6-1E3D-3BAB-B2B7-A5399EA1EBD1} "/>  </InstallChecks>  <!-- Defines how to invoke the setup for the Visual C++ 14.0 redist -->  <Commands Reboot="Defer">    <Command PackageFile=" vc_redist.x64.exe " Arguments=' /q:a '>

 

弊社製品の不具合でご迷惑をおかけし、誠に申し訳ありません。Visual C++ "14" ランタイム ライブラリを必須コンポーネントに含めてインストーラーを作成する場合には、上記の手順での対処をお願いいたします。

 

※ 1 PulicKey の値には、最新の Visual C++ "14" ランタイム ライブラリのインストーラーをダウンロードし、実行可能ファイルのデジタル署名に含まれる証明書の公開キーの値を指定します。

1. ダウンロードした [vc_redist.x86.exe] または [vc_redist.x64.exe] を右クリックし、プロパティを表示します。
2. プロパティ画面上部タブ [デジタル署名] に移動します。
3. [署名の一覧] で下記の証明書を選択し [詳細] をクリックします。

署名者名 : Microsoft Corporation
ダイジェスト アルゴリズム : sha1

4. デジタル署名の詳細画面では、画面中央 [証明書の表示] をクリックします。
5. 証明書が表示されましたら上部タブ [詳細] に移動いただき [公開キー] を選択します。
6. 表示された公開キーをメモ帳などにコピーして、置換で半角スペースを削除してください。
なお、最新の Visual C++ "14" ランタイム ライブラリのインストーラーは、Visual Studio のダウンロード – ページ下部 [Other Tools and Frameworks] 内で、[Visual Studio 2017 の Microsoft Visual C++ 再頒布可能パッケージ] の欄で x86 もしくは x64 にチェックを付けダウンロードしてください。

Visual Studio のダウンロード https://www.visualstudio.com/ja/downloads/

なお、お客様のインストーラーに含めて配布していただくための Visual C++ “14” ランタイム ライブラリのインストーラーは、以下のドキュメントでご案内しておりますようにPackage.xml に指定されている URL からダウンロードしてください。

How to: Include Prerequisites with a ClickOnce Application
/en-us/visualstudio/deployment/how-to-include-prerequisites-with-a-clickonce-application

 

また、最新の Visual C++ “14” ランタイム ライブラリのインストーラーは Visual Studio のダウンロード – ページ下部 [Other Tools and Frameworks] 内で、[Visual Studio 2017 の Microsoft Visual C++ 再頒布可能パッケージ] の欄で x86 もしくは x64 にチェックを付けてダウンロードしていただけます。
以下のページから最新のインストーラーをご利用いただく際には Product Code が異なる可能性がございますので、お手数をおかけいたしますが予め Product Code をご確認いただいた上で Product.xml の変更をお願いいたします。

Visual Studio のダウンロード
https://www.visualstudio.com/ja/downloads

 

Product Code につきましては、以下のドキュメントでご案内しております Uninstall レジストリ キーのサブ キーからご確認ください。DisplayName 値として、” Microsoft Visual C++ 2017 xxx Minimum Runtime - <バージョン番号>” を含むサブ キーが、Visual C++ “14” ランタイム ライブラリの Product Code となります。(xxx は、x86 もしくは x64 となります。)

Uninstall Registry Key
https://msdn.microsoft.com/ja-jp/library/windows/desktop/aa372105(v=vs.85).aspx
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall

 

 

重要
お客様からのご報告により、現状の Product.xml で行われている Product Code による製品検出については、別の問題が発生する可能性を確認しております。
この点につきましては以下の記事でご案内しておりますので、あわせてご確認ください。

Visual Studio 2017 で Visual C++ “14” ランタイム ライブラリをインストーラーに含めた場合に発生する問題について (2)
https://blogs.msdn.microsoft.com/jpvsblog/2017/07/11/vs2017-vc14-installer-2/