Visual C ++ Redistributable for Visual Studio 2012がインストールされているかどうかを検出する


109

Visual C ++ Redistributable for Visual Studio 2012がインストールされているかどうかを検出する方法

私はそれをグーグルで試しました、そして誰もこの質問をしていません、驚き!


1
C ++のランタイムライブラリを設定してその依存関係を削除して、コード生成をマルチスレッド[デバッグ] DLLではなくマルチスレッド[デバッグ]にしてみませんか?依存関係を削除するだけで、ランタイム再頒布インストールの問題を解決しました。
Cem Kalyoncu、2015

試行錯誤でパッケージを検出する方法を見つけました。魔法の弾丸があったらいいのですが、あったとしてもまだ見つけていません。現在ほとんどの場合に役立つ100%の時間で機能していると思われる特定のredistsについて、以下に回答があります。
kayleeFrye_onDeck 2016年

3
承認された回答をkayleeFrye_onDeckによる回答に変更することを検討してください。私は何年もかけて信頼できる方法を探してきましたが、これが1つの方法のようです。他のすべての信頼できない答えがあれば、多くの人が適切な情報を見つけるのに役立つと思います
musefan

Visual Studio 2017ランタイムの更新があるようです:14.10.V25017。リンク:go.microsoft.com/fwlink/ ? LinkId=746572レジストリ値を更新できますか?
karel vergauwe 2017

回答:


172

使用しているバージョンによって異なります。これらの2つの2012キーは、Update 4にダウンロードするための対応するバージョンで私にはうまく機能しています。これらのregの場所の一部はOSに依存している場合があることに注意してください。この情報はWindows 10 x64ボックスから収集しました。インストールを検出するために、これらの再頒布バージョンと検索するregキーをすべてダンプしていきます。


Visual C ++ 2005

Microsoft Visual C++ 2005 Redistributable (x64)
Registry Key: HKLM\SOFTWARE\Classes\Installer\Products\1af2a8da7e60d0b429d7e6453b3d0182
Configuration: x64
Version: 6.0.2900.2180

直接ダウンロードURL:https : //download.microsoft.com/download/8/B/4/8B42259F-5D70-43F4-AC2E-4B208FD8D66A/vcredist_x64.EXE

Microsoft Visual C++ 2005 Redistributable (x86)
Registry Key: HKLM\SOFTWARE\Classes\Installer\Products\c1c4f01781cc94c4c8fb1542c0981a2a 
Configuration: x86
Version: 6.0.2900.2180

直接ダウンロードURL:https : //download.microsoft.com/download/8/B/4/8B42259F-5D70-43F4-AC2E-4B208FD8D66A/vcredist_x86.EXE


Visual C ++ 2008

Microsoft Visual C++ 2008 Redistributable - x64 9.0.30729.6161 (SP1)
Registry Key: HKLM\SOFTWARE\Classes\Installer\Products\67D6ECF5CD5FBA732B8B22BAC8DE1B4D 
Configuration: x64
Version: 9.0.30729.6161 (Actual $Version data in registry: 0x9007809 [DWORD])

直接ダウンロードURL:https : //download.microsoft.com/download/2/d/6/2d61c766-107b-409d-8fba-c39e61ca08e8/vcredist_x64.exe

Microsoft Visual C++ 2008 Redistributable - x86 9.0.30729.6161 (SP1)
Registry Key: HKLM\SOFTWARE\Classes\Installer\Products\6E815EB96CCE9A53884E7857C57002F0
Configuration: x86
Version: 9.0.30729.6161 (Actual $Version data in registry: 0x9007809 [DWORD])

直接ダウンロードURL:https : //download.microsoft.com/download/d/d/9/dd9a82d0-52ef-40db-8dab-795376989c03/vcredist_x86.exe


Visual C ++ 2010

Microsoft Visual C++ 2010 Redistributable (x64)
Registry Key: HKLM\SOFTWARE\Classes\Installer\Products\1926E8D15D0BCE53481466615F760A7F 
Configuration: x64
Version: 10.0.40219.325

直接ダウンロードURL:https : //download.microsoft.com/download/1/6/5/165255E7-1014-4D0A-B094-B6A430A6BFFC/vcredist_x64.exe

Microsoft Visual C++ 2010 Redistributable (x86)
Registry Key: HKLM\SOFTWARE\Classes\Installer\Products\1D5E3C0FEDA1E123187686FED06E995A 
Configuration: x86
Version: 10.0.40219.325

直接ダウンロードURL:https : //download.microsoft.com/download/1/6/5/165255E7-1014-4D0A-B094-B6A430A6BFFC/vcredist_x86.exe


Visual C ++ 2012

Microsoft Visual C++ 2012 Redistributable (x64)
Registry Key: HKLM\SOFTWARE\Classes\Installer\Dependencies\{ca67548a-5ebe-413a-b50c-4b9ceb6d66c6} 
Configuration: x64
Version: 11.0.61030.0

直接ダウンロードURL:https : //download.microsoft.com/download/1/6/B/16B06F60-3B20-4FF2-B699-5E9B7962F9AE/VSU_4/vcredist_x64.exe

Microsoft Visual C++ 2012 Redistributable (x86)
Registry Key: HKLM\SOFTWARE\Classes\Installer\Dependencies\{33d1fd90-4274-48a1-9bc1-97e33d9c2d6f} 
Configuration: x86
Version: 11.0.61030.0

直接ダウンロードURL:https : //download.microsoft.com/download/1/6/B/16B06F60-3B20-4FF2-B699-5E9B7962F9AE/VSU_4/vcredist_x86.exe

バージョンの警告:ユーザーごとの Wai Ha Leeの調査結果、「... VC ++ 2012 update 4(11.0.61030.0)に付属するバイナリに11.0.60610.1は、ATLおよびMFCバイナリ用のバージョンと、11.0.51106.1その他すべてのバージョンがありますたとえば、msvcp110.dllやmsvcr110.dllです。 ……」


Visual C ++ 2013

Microsoft Visual C++ 2013 Redistributable (x64)
Registry Key: HKLM\SOFTWARE\Classes\Installer\Dependencies\{050d4fc8-5d48-4b8f-8972-47c82c46020f} 
Configuration: x64
Version: 12.0.30501.0

直接ダウンロードURL:https : //download.microsoft.com/download/2/E/6/2E61CFA4-993B-4DD4-91DA-3737CD5CD6E3/vcredist_x64.exe

Microsoft Visual C++ 2013 Redistributable (x86)
Registry Key: HKLM\SOFTWARE\Classes\Installer\Dependencies\{f65db027-aff3-4070-886a-0d87064aabb1} 
Configuration: x86
Version: 12.0.30501.0

直接ダウンロードURL:https : //download.microsoft.com/download/2/E/6/2E61CFA4-993B-4DD4-91DA-3737CD5CD6E3/vcredist_x86.exe


Visual C ++ 2015

代わりに2015-2019バンドルの使用を検討してください

Microsoft Visual C++ 2015 Redistributable (x64) - 14.0.24215
Registry Key: HKLM\SOFTWARE\Classes\Installer\Dependencies\{d992c12e-cab2-426f-bde3-fb8c53950b0d}
Configuration: x64
Version: 14.0.24215.1

直接ダウンロードURL:https : //download.microsoft.com/download/6/A/A/6AA4EDFF-645B-48C5-81CC-ED5963AEAD48/vc_redist.x64.exe

Microsoft Visual C++ 2015 Redistributable (x86) - 14.0.24215
Registry Key: HKLM\SOFTWARE\Classes\Installer\Dependencies\{e2803110-78b3-4664-a479-3611a381656a}
Configuration: x86
Version: 14.0.24215.1

直接ダウンロードURL:https : //download.microsoft.com/download/6/A/A/6AA4EDFF-645B-48C5-81CC-ED5963AEAD48/vc_redist.x86.exe


Visual C ++ 2017

代わりに2015-2019バンドルの使用を検討してください

警告:2017年の新しいレジストリ規約が使用されているか、まだ確定されていません。私はの一番上のキーを推測しているとおり: [HKEY_CLASSES_ROOT\Installer\Dependencies\,,amd64,14.0,bundle][HKEY_CLASSES_ROOT\Installer\Dependencies\,,x86,14.0,bundle]

変更される可能性がある、または少なくとも異なるGUIDがネストされている場合は、GUIDで終わるキーをリストに使用します。

Microsoft Visual C++ 2017 Redistributable (x64) - 14.16.27012
Registry Key: [HKEY_CLASSES_ROOT\Installer\Dependencies\VC,redist.x64,amd64,14.16,bundle\Dependents\{427ada59-85e7-4bc8-b8d5-ebf59db60423}]
Configuration: x64
Version: 14.16.27012.6

直接ダウンロードURL:https : //download.visualstudio.microsoft.com/download/pr/9fbed7c7-7012-4cc0-a0a3-a541f51981b5/e7eec15278b4473e26d7e32cef53a34c/vc_redist.x64.exe

Microsoft Visual C++ 2017 Redistributable (x86) - 14.16.27012
Registry Key: [HKEY_CLASSES_ROOT\Installer\Dependencies\VC,redist.x86,x86,14.16,bundle\Dependents\{67f67547-9693-4937-aa13-56e296bd40f6}]
Configuration: x86
Version: 14.16.27012.6

直接ダウンロードURL:https : //download.visualstudio.microsoft.com/download/pr/d0b808a8-aa78-4250-8e54-49b8c23f7328/9c5e6532055786367ee61aafb3313c95/vc_redist.x86.exe


Visual C ++ 2019(2015-2019バンドル

警告:Visual C ++ 2019で使用されている別の新しいレジストリ規則があります。また、Visual C ++ 2019のスタンドアロンインストーラーではないようです。このバンドルインストーラーはVisual C ++ 2015〜2019のみです。

14.21.27702

Microsoft Visual C++ 2015-2019 Redistributable (x64) - 14.21.27702
Registry Key: [HKEY_CLASSES_ROOT\Installer\Dependencies\VC,redist.x64,amd64,14.21,bundle\Dependents\{f4220b74-9edd-4ded-bc8b-0342c1e164d8}]
Configuration: x64
Version: 14.21.27702  

直接ダウンロードURL:https : //download.visualstudio.microsoft.com/download/pr/9e04d214-5a9d-4515-9960-3d71398d98c3/1e1e62ab57bbb4bf5199e8ce88f040be/vc_redist.x64.exe

Microsoft Visual C++ 2015-2019 Redistributable (x86) - 14.21.27702
Registry Key: [HKEY_CLASSES_ROOT\Installer\Dependencies\VC,redist.x86,x86,14.21,bundle\Dependents\{49697869-be8e-427d-81a0-c334d1d14950}]
Configuration: x86
Version: 14.21.27702

直接ダウンロードURL:https : //download.visualstudio.microsoft.com/download/pr/c8edbb87-c7ec-4500-a461-71e8912d25e9/99ba493d660597490cbb8b3211d2cae4/vc_redist.x86.exe

14.22.27821

Microsoft Visual C++ 2015-2019 Redistributable (x86) - 14.22.27821
Registry Key: [HKEY_CLASSES_ROOT\Installer\Dependencies\VC,redist.x86,x86,14.22,bundle\Dependents\{5bfc1380-fd35-4b85-9715-7351535d077e}]
Configuration: x86
Version: 14.22.27821

直接ダウンロードURL:https : //download.visualstudio.microsoft.com/download/pr/0c1cfec3-e028-4996-8bb7-0c751ba41e32/1abed1573f36075bfdfc538a2af00d37/vc_redist.x86.exe

Microsoft Visual C++ 2015-2019 Redistributable (x86) - 14.22.27821
Registry Key: [HKEY_CLASSES_ROOT\Installer\Dependencies\VC,redist.x64,amd64,14.22,bundle\Dependents\{6361b579-2795-4886-b2a8-53d5239b6452}]
Configuration: x64
Version: 14.22.27821

直接ダウンロードURL:https : //download.visualstudio.microsoft.com/download/pr/cc0046d4-e7b4-45a1-bd46-b1c079191224/9c4042a4c2e6d1f661f4c58cf4d129e9/vc_redist.x64.exe


変更ログ
2019年8月19日-2015-2019バンドルバージョンの新しいバージョンを
追加2019年6月13日-2015-2019バンドルバージョンの新しいセクションを追加し、2015と2017のセクションの使用に関する考慮事項に関する小さなメモ14.21.27702追加代替としての新しいバンドル。 2018年12月14日-ジムウルフの調査結果に基づくService Pack 1の更新の ためのMSVC2008の更新2018年11月27日-MSVC2017の情報の更新v 2018年9月12日-Wai Ha Leeの調査結果による2012 Update 4にバージョンの警告を追加 8月24日2018-14.15.26706の2017バージョンを更新し、VS 2017 15.8.1にパッケージされた更新されたVisual C ++依存関係
9.0.30729.6161
14.16


2018年5月16日-新しいC ++ 2017エントリ
として14.14.26405.0の2017バージョンを更新2017年9月8日-新しいVisual C ++ 2017エントリとして14.11.25325.0の2017バージョンを更新2017年
4月7日-14.10の2017バージョンを更新.25008.0を新しいVisual C ++ 2017エントリ
として2016年10月24日-2015年のバージョン情報を14.0.24215.1に
更新2016年8月18日-14.0.24212の2015年のバージョン情報を
更新2016年5月27日-MSVC2015 Update 2の情報を更新

これらのいずれかが古くなった場合は、こちらからご連絡ください。


4
これは完璧です。これは、Visual Studioがインストールされているとき、またはランタイムがアンインストールされているときに誤検出を与えない唯一の方法です。
AN

2
VS2015 Pre Update 1のGUIDは{74d0e5db-b326-4dae-a6b2-445b9de1836e}なので、このメカニズムを使用してピクルスに入ることができます。今後のアップデートごとに!Update 1がインストールされたUpdate 1より前のVCRedistを起動するとエラーが発生しました。VCインストーラーのregキーを使用します。VCRedistを使用している場合は問題ないようです。
GilesDMiddleton、2016年

4
残念ながら、これにはVCREDIST 14.0 Update 2が含まれていません-前方互換性をどのように処理しますか(同じランタイムの新しい後続バージョンの検出)
Shaun Wilson

2
@ ManjunathBabu、Visual C ++再頒布可能インストーラーのレジストリ規約に関する外部ドキュメントはないと思います。今回は、意味のある親キー名のない別のGUIDをどこかに投げるのではなく、今回は2017年頃のスキームに似たものに実際に従っているように見えた。これまでのところ、彼らは2017年のためのすべてのリリースのインストーラのためにこれらの場所を使用しています [HKEY_CLASSES_ROOT\Installer\Dependencies\,,x86,14.0,bundle\Dependents\{$GUID}[HKEY_CLASSES_ROOT\Installer\Dependencies\,,amd64,14.0,bundle\Dependents\{$GUID}
kayleeFrye_onDeck

2
Visual C ++ 2017の新しいパッケージは、レジストリパスを変更します(バージョン14.16.27012.6)[HKEY_CLASSES_ROOT\Installer\Dependencies\VC,redist.x86,x86,14.16,bundle] [HKEY_CLASSES_ROOT\Installer\Dependencies\VC,redist.x64,amd64,14.16,bundle]
live2

31

試す

HKLM\SOFTWARE\Microsoft\DevDiv\VC\Servicing\11.0

出発点として。これは、VC ++ 11(VS 2012)ランタイムをインストールするためのチェックとして使用します。


7
HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ DevDiv \ vc \ Servicing \ 11.0 \ RuntimeMinimum \ Install is 1 to set 1
Alex Spence

3
:32ビット(x86別名)キーに配置されているためHKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\DevDiv\VC\Servicing\11.0\RuntimeMinimum
CodeFox

@kayleeFrye_onDeckこれを行う方法を見つけましたか?私も信頼できる方法を探していますが、このページの回答はどれもうまくいきませんでした
AN

パッケージUUIDに依存しないため、Microsoftが提供するパッチごとに変更される可能性があるため、承認されたものよりも良い回答
jpo38

25

このレジストリの場所にあるInstalled値を確認でき1ます:HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\11.0\VC\Runtimes\x8664ビットシステム。レジストリキーへのアクセスを引き起こすコードHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\11.0\VC\Runtimes\x86。がないことに注意してくださいWow6432Node

32ビットシステムでは、レジストリは同じWow6432Nodeです。HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\11.0\VC\Runtimes\x86


2012 VC ++ランタイムがインストールされた32ビットWin7マシンを使用していますが、このregキーを持っていません。
BryanJ 2013年

`HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ VisualStudio \ 11.0 \ VC`がなくてもよろしいですか?何がありますか?
Mike de Klerk 2013年

2
持っているHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\11.0\VCRuntimes鍵を持っていない。デイブの答えに鍵がありますHKLM\SOFTWARE\Microsoft\DevDiv\VC\Servicing\11.0
BryanJ 2013年

@BryanJ各システムが非常に異なる可能性があるのは奇妙...この有用な情報を追加してくれてありがとう
マイク

3
面白い話で、MSからの実際の情報はありません。私がこれまでに見つけた最良の答えがあると思います。相対性の新しいVMにvcredistをインストールするためにテストされました。これは、後で見つけた唯一のキーです。だから私の側から親指を立てる...
anhoppe 2014

12

Visual C ++に付属するブートストラップパッケージマニフェストには、installcheck要素はありません。前提条件として設定した場合、Microsoftは常にインストールしたいと思います。

もちろん、MsiQueryProductStateを呼び出して、VC redistパッケージがMSI経由でインストールされているかどうかを確認することもできます。パッケージコードは、

wmic product get

コマンドラインで、またはすでにwmic:root \ cliにいる場合は、

product where "Caption like '%C++ 2012%'"

10

残念ながら、この単純な質問に対する答えは単純なものではありませんが、すべてのシステムの100%で機能し、多数の.netフレームワークにも拡張できます。

複雑さは、多くのVCランタイムリビジョンが存在する(およびあった)ためであり、VC10ランタイムがインストールされていても、ビルド番号が十分に新しくないため、非常にインストールされていない限り、EXEが起動しません。必要な正確なランタイム、または同じメジャーバージョンのこのバージョンと以前のバージョンを一緒に実行できるようにする新しいランタイムの1つ(並列地獄)。また、64ビットEXEを使用している場合は、32および64ビットランタイムの両方を確認する必要があります。

そうは言っても、EXEのランタイムがインストールされているかどうかを判断する唯一の信頼できる方法は、EXEまたはメインのEXEと同じ設定でビルドされ、実行のみを目的とする別のEXE を実行することです。ただ実行する(つまり、ランタイムがインストールされている)か、実行に失敗する(インストールされていない場合)。

VC10 32ビットおよび64ビットランタイムのインストールを必要とするインストーラーに対して次のことを行いました。インストーラーはすべてのダミーEXEを起動しようとし、成功した場合、対応するランタイムはインストールされていると見なされます。これにより、32/64ビットのシナリオも解決されます。

ちなみに、これは、適切な.netフレームワークがインストールされているかどうかを判断するためにも機能します。これは、ダウンロード可能な組み込み.net 3.5サポートが.netバージョン3.0および2.0もサポートしているため、Windows 8および10では非常にトリッキーです。これらのレジストリエントリはありません。(そして悪いことに、あなたも、あなたは、ここでは標準フレームワークのインストーラを使用することはできませんしなければならないサポートを内蔵し、Windows経由でダウンロードを使用する、または.NET 4を使用してアプリケーションを再構築し、それはまた別の話です)。

C ++ダミーEXEは、次のコード(および必要に応じて64ビット構成の別のコード)を含むプロジェクトを使用してビルドできます。

int _tmain(int argc, _TCHAR* argv[])
{
    return 0;
}

共有DLL でMFC使用するには、プロジェクトのプロパティUse of MFC必ず設定してください。実行可能ファイルのサイズは約4KBです-確実な結果を得るために支払うには少額です。

ユーザーに優れたインストールエクスペリエンスを提供するために、以下を実行できます(サンプルコードはNSIS用です)。

Function TryLaunchApplication
  Pop $1 ; pathname
  nsExec::Exec $1
  Pop $0

  ${If} $0 == "error"
  ${OrIf} $0 != 0
    Push 0
  ${Else}
    Push 1
  ${EndIf}
FunctionEnd

そしてそれを関数で呼び出す、例えばCheckRuntimes

Function CheckRuntimes
  ; Try to execute VC++ 10 application (32 bit)
  Push "Vc10RuntimeCheckerApp.exe"
  Call TryLaunchApplication
  Pop $Vc10RuntimesFound

  ; Add 64 bit check if required.
  ; Remember to try running the 64 bit EXE only on a 64 bit OS,
  ; which requires further checks.

  ; Try to execute .net application
  Push "DotNetRuntimeCheckerApp.exe"
  Call TryLaunchApplication
  Pop $DotNetFrameworkFound
FunctionEnd

次に、実行時チェックを起動します。たとえば、ようこそページを離れて結果をキャッシュする場合、ユーザーが「戻る」および「次へ」ボタンをクリックするたびに再チェックする必要はありません。

次に、インストールツリーに読み取り専用セクションを作成し、[ コンポーネント]ページが表示される前に実行される関数で、そのセクションを事前選択または選択解除します。

これにより、欠落している各ランタイムコンポーネントのインストールが必須となり、すでに存在する場合はスキップされます。


役立つヒントをありがとうございます。どのような種類のプロジェクトを作成する必要があるか覚えていますか?VSには、たくさんの選択肢があります:-)。
greenoldman

9

Visual Studio 2010以降ではWinSxSの使用を停止したため、%windir%\ system32 \ msvcr110.dllを確認するだけで十分な場合があります。十分に新しいバージョンであることを確認する場合は、ファイルのバージョンが11.0.50727.1(VS2012 RTM)か11.0.51106.1(VS2012 Update 1)かを確認できます。


+1これはより単純で、より簡単です。レジストリキーはすべて問題ありませんが、ユーザーがシステムをいじってmsvcr110.dllを削除した場合、レジストリチェックは役に立ちません。ただし、必要なすべてのコンポーネント(msvcr110.dll、msvcp110.dll、mfcなど)を確認することをお勧めします。また、アップデート3のバージョンは11.0.60610.1です。
stijn 2013

最後のビットを無視してください:インストーラーのみが11.0.60610.1であるようですが、CRT DLLのバージョンはまだ11.0.51106.1です
stijn

ya .dllは11.0.51106.1です。vs2012sp4がインストールされていますが
Blub

これは機能しません。2005-2015をアンインストールしましたが、まだ60、100、110、120、140のmsvcファイルがあります。
kayleeFrye_onDeck 2015年

VC ++ 2012 update 4(11.0.61030.0)に付属するバイナリに11.0.60610.1は、ATLおよびMFCバイナリ用のバージョンと、11.0.51106.1msvcp110.dllやmsvcr110.dllなどのその他すべてのバイナリ用のバージョンがあることに注意してください。なぜだかわかりません。あなたは、に行くことによって(私はそれをテストしてみたのWindows 10マシン上で)これを確認することができますC:\ProgramData\Package Cache\{BD95A8CD-1D9F-35AD-981A-3E7925026EBB}v11.0.61030\packages\vcRuntimeMinimum_x86し、C:\ProgramData\Package Cache\{B175520C-86A2-35A7-8619-86DC379688B9}v11.0.61030\packages\vcRuntimeAdditional_x86その後、.cabファイル内のファイルを検査します。
Wai Ha Lee

5

私は、WiXによって作成されたMSIインストーラーの一部としてVisual C ++再頒布可能パッケージをチェックするコンテキストで答えを探しているこの質問に出くわしました。

バージョンとオペレーティングシステムによるGUIDの変化が気に入らなかったため、Visual C ++再頒布可能パッケージをチェックするために、C#で記述されたカスタムアクションを作成することになりました。

以下はすべてVisual C ++ 2015再頒布可能パッケージ(x64)専用ですが、どのバージョンでも簡単に変更できます。

using Microsoft.Deployment.WindowsInstaller;
using Microsoft.Win32;

namespace CustomActions
{
    public class DependencyChecks
    {
        [CustomAction]
        public static ActionResult IsVC2015RedistInstalled(Session session)
        {
            session.Log("Begin Visual C++ 2015 Redistributable installation check.");

            var dependenciesKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Classes\\Installer\\Dependencies");

            foreach(var subKey in dependenciesKey.GetSubKeyNames())
            {
                var dependency = dependenciesKey.OpenSubKey(subKey);
                var displayName = (string)dependency.GetValue("DisplayName");
                if(displayName != null)
                {
                    if (displayName.Contains("Microsoft Visual C++ 2015 Redistributable (x64)"))
                    {
                        session.Log("Visual C++ 2015 Redistributable is installed.");
                        return ActionResult.Success;
                    }
                }
            }

            session.Log("Visual C++ 2015 Redistributable is not installed.");
            session.Message(InstallMessage.Error, new Record(1, "This application requires Visual C++ 2015 Redistributable. Please install, then run this installer again. https://www.microsoft.com/en-us/download/details.aspx?id=53587"));
            return ActionResult.Failure;
        }
    }
}

次にwxsファイルで

<Binary Id='VC2015RedistCheck' SourceFile='!(wix.ResourcesDir=resources)\CustomActions.CA.dll'/>
    <CustomAction
      Id='VC2015RedistCheckAction'
      Execute='immediate'
      BinaryKey='VC2015RedistCheck'
      DllEntry="IsVC2015RedistInstalled"
      Return='check'/>

<InstallExecuteSequence>
  <Custom Action='VC2015RedistCheckAction' After='InstallInitialize'/>
</InstallExecuteSequence>

編集 カスタム応答の作成と使用に関するいくつかの基本的な情報でこの回答を更新しています。

WiX Toolset Visual Studio 2017拡張機能がインストールされたVisual Studio 2017でカスタムアクションを作成するために、プロジェクトテンプレートを使用してカスタムアクション(WiX v3のC#カスタムアクションプロジェクト)を作成しました。

生成されたプロジェクトを確認しましたが、この記事の冒頭に記載されている変更が既にあるようです:https : //www.codeproject.com/Articles/132918/Creating-Custom-Action-for-WIX-Written-in-Managedそれで私はその記事をセクションで取り上げ、Adding Custom Action to the Installerいくつかの微調整を加えました。

私が行ったもう1つのことは、プロジェクトがビルドされる.NETフレームワークのバージョンを3.5に変更することでした。

本当に便利だとは思いませんでしたが、http://wixtoolset.org/documentation/manual/v3/wixdev/extensions/authoring_custom_actions.htmlもご覧ください。


4

私にとってこの場所は機能しました:HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ DevDiv \ vc \ Servicing \ 11.0 \ RuntimeMinimum \ Version

パッケージをインストールした後のバージョンを確認し、それをインストーラーの条件として使用します。(私はVCredをインストールした後に11.0.50727に設定されています)。


この答えは、まさに私たちが探していたものです(残念ながら、ランタイムに関するものではなく、Visual Studioに関するものです)
Shaun Wilson

redistsをアンインストールした後にこのキーが存在するため、この回答は機能しません。
kayleeFrye_onDeck 2015年

4

[コントロールパネル]> [プログラムと機能]に移動すると、それらすべてがリストに表示されます。

私は専門家ではありません。この回答は、人々が回答しているもの(レジストリをチェックする)に比べてかなり単純なので、それが正しい答えかどうかはわかりませんが、私にとってはうまくいきました。

プログラムと機能


3
if RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\10.0\VC\VCRedist\x86","Installed") = 0 Then
  if RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\11.0\VC\Runtimes\x86","Installed") = 0 Then

3

私はこれをInnoSetupで成功させました。

レジストリキーの存在を確認しました。

HKLM\SOFTWARE\Microsoft\VisualStudio\11.0\VC\Runtimes

アンインストールした場合は存在しません。インストールされている場合は存在します。

ちなみに、それはWow6432Nodeにもあります。

HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\11.0\VC\Runtimes


これは真実ではありません。キーは、アンインストールされたときに両方の場所に存在します。
kayleeFrye_onDeck 2015年

1
@kayleeFrye_onDeckうん...私はあなたに同意する必要があります。しかし、実際、私が初めてそれを試したとき、それは成功した。しかし、最近それはあなたが言ったようなものです。どうしてそんなのか分からない。
Fandi Susanto 2015年

3

MsiQueryProductStateを使用して製品のインストール状態を確認することは、レジストリを直接確認することとほとんど同じですが、それでもProductCodeの GUIDが必要です。

他の場所で述べたように、これらのアプローチの1つの欠点は、更新ごとに独自のProductCodeがあることです。

ありがたいことに、MSIは、製品の「ファミリ」を識別するUpgradeCodeを提供します。orcaを使用してMSIの1つを開き、この情報を抽出できます。たとえば、VS2015の再頒布可能パッケージのUpgradeCodeは{65E5BD06-6392-3027-8C26-853107D3CF1A}

MsiEnumRelatedProductsを使用して、そのUpgradeCodeのすべての製品IDを取得できます。実際には、各redist更新は以前の更新と置き換えられる{B5FC62F5-A367-37A5-9FD2-A6E137C0096F}ため、VS2015 Update 2 x86 などの場合、ProductCodeは1 つしか生成されません。

かかわらず、あなたはその後経由でバージョンを確認することができますMsiGetProductInfo同等またはそれ以降のバージョンをチェックするためにあなたがしたいバージョン、例えばと比較するために(製品コード、INSTALLPROPERTY_VERSIONSTRING、...)、または類似の機能。

C ++アプリケーション内で、あなたも使用できることに注意してください_VC_CRT_MAJOR_VERSION_VC_CRT_MINOR_VERSION_VC_CRT_BUILD_VERSIONあなたがあれば#include <crtversion.h>、この方法で、あなたのバイナリがで構築されたことを計算CRTのバージョンを確認することができます- 。


どのようにしてこの情報を入手しましたか?そして、それはx86バージョンまたはx64バージョンのUpgradeCodeですか?
ベンキー

Orcaを使用してmsiを開き、UpgradeCodeを抽出できます。ここに記載されているものは、少なくともx86用です。残りの情報をどこで入手したかに関しては、これがほとんど主要な情報源です。特にredistに関するこのアプローチの他の参照をオンラインで見つけることはできませんでしたが、UpgradeCode /ファミリーパターンはMSIインストーラーで一般的です。
adzm

私はオルカを知っています。問題は、そのMSIに到達することに関係しています。直接アクセスする方法がわかりません。私が知っている唯一の方法は、なんとかしてc:\ Windows \ Installerディレクトリでそれを見つけることです。そのディレクトリには1,000以上のファイルがあります。ファイルにはランダムな名前が付けられます。正しいMSIを判断する唯一の方法は、説明を確認することです。これには、エクスプローラーの1,000ファイルでAlt + Enterを押すか、ツールを使用して1,000ファイルの説明をダンプすることが含まれます。
ベンキー

ええ、わかりました。レジストリも検索して、HKLM \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Installer \ UpgradeCodes内のパス、または製品コードがわかっている場合はアップグレードコードを見つけることができます。ただし、残りを把握するために、WMIC(またはmsi dbへの他のプログラムによるアクセス)を使用する必要がある場合があります。wmic product get / format:csvは、検索可能なcsvをダンプします-戻り値にmsiパスがあります。私はきっともっと良いスクリプトを書くことができますが、これはあなたを先に進めるのに十分なはずです。
adzm 2016

3

このPowerShellコードでうまくいくはずです

Get-ItemProperty
HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | 
Select-Object DisplayName, DisplayVersion, Publisher, InstallDate |
Format-Table AutoSize

一連の製品コードをハードコーディングすることはできなかったので、レジストリも列挙して各エントリの "productname"を正規表現でチェックし、次にVersionMajor / VersionMinor(これは本当に重要なことです)をチェックします。これには値があります単一のビルドを生成し、それが特定のvcredistバージョンのサービス期間にわたって機能し続けることを確認できるようにすること。ここでの目的はスポットオンですが、NSISやWinAPIベースのインストーラーなどのツールセットには文字変換が必要な場合があります。
Shaun Wilson

2

私は同じことを必要としていた、そして私の知る限りこれはプログラムで行うことができないが、それは私のために働いた。

[スタート]-> [プログラムのアンインストール]に移動し、VC ++再頒布可能パッケージ(バージョン番号を含む)が見つかるまでスクロールダウンしました。バージョン番号をグーグルで調べて、それがVS2012 SP1に属していることを教えてくれました。


2

古い質問ですが、ここではVisual Studio 2005以来成功を収めてきたアプローチを紹介します。Visual Studio 2012 Update 4を使用してテストしました(2010年から2012年にようやくソフトウェアを更新するため)。

Visual C ++再頒布可能パッケージはアンインストーラーをウィンドウに登録するため(コントロールパネルの[プログラムと機能]リストに表示されるため)、レジストリでアンインストーラーキーの表示名を確認するだけです。

関連するNSISコードは次のとおりです。

ReadRegStr $0 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{33d1fd90-4274-48a1-9bc1-97e33d9c2d6f}\" "DisplayName"
StrCmp $0 "Microsoft Visual C++ 2012 Redistributable (x86) - 11.0.61030" vs2012redistInstalled
DetailPrint "Microsoft Visual C++ 2012 Update 4 Redistributable not found!"
DetailPrint "Downloading from www.mywebsite.com"
; insert applicable download code here
ExecWait '"<downloaded redist exe>" /promptrestart /passive'
vs2012redistInstalled:

インストーラーは32ビットのexeであるため、Windowsはレジストリキーが実際には上記の場所ではなく仮想化されたWow6432Nodeにあるかどうかを判断するため、上記のコードは64ビットと32ビットの両方のWindowsインストールで動作し、両方のキーを明示的に確認する必要はありません。

また、上記のコードを別のバージョンのVC ++ Redistに更新するには、レジストリキーのパスのGUIDと表示名を必要なものに変更するだけです。

これは推奨される方法ではないかもしれませんが、過去10年間で10,000台以上のマシンで動作し、XP、XP64からWindows 10までのあらゆる種類のウィンドウを2005、2010、2010sp1、および現在2012u4の再配布を使用して実行しています。


1

Installed値をチェックします

HKLM\SOFTWARE\[WOW6432Node]\Microsoft\Windows\CurrentVersion\Uninstall\{VCRedist_GUID} キー

  • のGUID VC++ 2012 (x86){33d1fd90-4274-48a1-9bc1-97e33d9c2d6f}
  • WOW6432NodeVC++ redist製品に応じて存在するかどうか

0

ほとんどの人が見逃しているのは、/reg:32Windows x64でキーをチェックするために必要なことです。

この件に関するマイクロソフトのヘルプ記事を参照してください。

以下は、Visual Studio 2012 Update 4のVisual C ++再頒布可能パッケージを正しく確認する方法を示すスクリプトです。

@ECHO OFF

:Author
REM "CREATED BY WAR59312"
REM "FEB 7th 2017"

REM Clear Screen
CLS

TITLE Detect Visual C++ 2012 Redistributables

REM This Batch Script Detects If Visual C++ Redistributable for Visual Studio 2012 Update 4 Is Installed

:DetectWindowsOS
REM Are We Running On x86 Or x64
IF NOT DEFINED PROCESSOR_ARCHITEW6432 (
IF %PROCESSOR_ARCHITECTURE% EQU x86 (
REM Windows Is x86
GoTo Check32Bit
) ELSE (
REM Windows Is x64
SET NeededFor64BitOnly=/reg:32
GoTo Check64Bit
)) ELSE (
REM Windows Is Unknown But Assume x64 To Be Safe
SET NeededFor64BitOnly=/reg:32
GoTo Check64Bit
)

:Check64Bit
REM Checks If Visual C++ 64Bit Redistributable for Visual Studio 2012 Update 4 Is Installed
REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\11.0\VC\Runtimes\x64" /v "Version" %NeededFor64BitOnly% 2>NUL^ | (
  FIND "v11.0.61030.00" >NUL
) && (
  ECHO.
  ECHO 64bit Visual C++ Redistributable for Visual Studio 2012 Update 4 Is Installed
  ECHO.
  GoTo Check32Bit
) || (
   ECHO.
   ECHO 64bit Visual C++ Redistributable for Visual Studio 2012 Update 4 Is NOT Installed
   ECHO.
   GoTo Check32Bit
)

:Check32Bit
REM Checks If Visual C++ 32Bit Redistributable for Visual Studio 2012 Update 4 Is Installed
REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\11.0\VC\Runtimes\x86" /v "Version" %NeededFor64BitOnly% 2>NUL^ | (
  FIND "v11.0.61030.00" >NUL
) && (
   ECHO.
   ECHO 32bit Visual C++ Redistributable for Visual Studio 2012 Update 4 Is Installed
) || (
   ECHO.
   ECHO 32bit Visual C++ Redistributable for Visual Studio 2012 Update 4 Is NOT Installed
)

:END
ECHO.
PAUSE

EXIT

0

powershellスクリプトソリューション:

@kayleeFrye_onDeckからの回答の情報に基づく

ユーザーが指定したバージョンをチェックしてインストールするPowerShellスクリプトを作成しましたが、それを使用した広範なテストは行っていませんが、自分のCI(継続的統合)シナリオでは完全に機能します。

完全なスクリプトとgithubの情報

私が使用したアプローチは、ここで提供される情報に基づいてregkeyをチェックすることに基づいていました。以下は、スクリプトが行うことの要点です。

function Test-RegistryValue {
param (
 [parameter(Mandatory=$true)]
 [ValidateNotNullOrEmpty()]$Path,
 [parameter(Mandatory=$true)]
 [ValidateNotNullOrEmpty()]$Value
)
    try {
    Get-ItemProperty -Path "$($Path+$Value)" -ErrorAction Stop | Out-Null
        return $true
    }
    catch {
        return $false
    }
}

$redistInfokayleeFrye_onDeckからのコンパイルされた情報を含むチェック/ダウンロード/サイレントインストール。

$redistInstalled = Test-RegistryValue -Path $redistInfo.RegPath -Value $redistInfo.RegValue
if($redistInstalled -eq $False) {
    Invoke-WebRequest -Uri $redistInfo.DownloadUrl -OutFile $downloadTargetPath
    Start-Process -FilePath $downloadTargetPath -ArgumentList "$($redistInfo.SilentInstallArgs)" -Wait -NoNewWindow | Wait-Process
}

完全なスクリプトと詳細はgithubにあります

情報があればここに追加するので、スクリプトのより広範なテストを行い、新しいパッケージを追加しようとする時間があれば、どなたでもご参加いただけます。


0

VC 2012のすべてのレジストリ値を取得するのは難しいため、すべての依存関係を通過し、指定されたバージョンに一致する小さな関数を記述しました。

public static bool IsVC2012Installed()
{
    string dependenciesPath = @"SOFTWARE\Classes\Installer\Dependencies";

    using (RegistryKey dependencies = Registry.LocalMachine.OpenSubKey(dependenciesPath))
    {
        if (dependencies == null) return false;

        foreach (string subKeyName in dependencies.GetSubKeyNames().Where(n => !n.ToLower().Contains("dotnet") && !n.ToLower().Contains("microsoft")))
        {
            using (RegistryKey subDir = Registry.LocalMachine.OpenSubKey(dependenciesPath + "\\" + subKeyName))
            {
                var value = subDir.GetValue("DisplayName")?.ToString() ?? null;
                if (string.IsNullOrEmpty(value)) continue;

                if (Regex.IsMatch(value, @"C\+\+ 2012")) //here u can specify your version.
                {
                    return true;
                }
            }
        }
    }

    return false;
}

依存関係:

using System.Text.RegularExpressions;
using Microsoft.Win32;
using System.Linq;

-5

レジストリで検索できます。実際にはvs2012はありませんが、vs2010があります。

3つのプラットフォームパッケージのそれぞれに、3つの異なる(ただし非常によく似た)レジストリキーがあります。各キーには、「Installed」と呼ばれるDWORD値があり、値は1です。

  • HKLM \ SOFTWARE \ Microsoft \ VisualStudio \ 10.0 \ VC \ VCRedist \ x86

  • HKLM \ SOFTWARE \ Microsoft \ VisualStudio \ 10.0 \ VC \ VCRedist \ x64

  • HKLM \ SOFTWARE \ Microsoft \ VisualStudio \ 10.0 \ VC \ VCRedist \ ia64

そのためにレジストリ機能を使用できます......


1
最初の行に「VS2012がないこと」と書いています。したがって、これにコメントする必要はありません.............そして、これはvs2010のみでした
vikky

1
あなたはそれを指摘しましたが、それはあなたのソリューションがOPの質問だったのでVS2012でも機能するかもしれないと提案しているように見えました(しかし、VS2012がないため確認できませんでした)。私はそれをチェックアウトして以来、このアプローチは実際にはVS2012では機能しないと単に述べていました。
StellarEleven 2013年

なぜ私の回答に反対票を投じる...私はそれがvs2012のためであることを明確に書いています...そしてこれはユーザーによって回答として受け入れられます...それでなぜ???????????
vikky

1
x64ビットOSでは、この値は次の場所にあるようですHKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\10.0\VC\VCRedist\...
bas

1
VS 2012キーはHKLM \ SOFTWARE \ Microsoft \ VisualStudio \ 11.0 \ VC \ RunTimes ____ HKLM \ SOFTWARE \ Wow6432Node \ Microsoft \ VisualStudio \ 11.0 \ VC \ RunTimes ___
Adam L
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.