Visual Studio 2012用のVisual C++再頒布可能パッケージがインストールされているかどうかを検出する方法
Googleで試してみましたが、誰もこの質問をしていません。
使用しているバージョンによって異なります。これらの2つの2012キーは、Update 4用にダウンロードする対応するバージョンでうまく機能しました。これらのregロケーションの一部はOSに依存する可能性があることに注意してください。この情報は、Windows 10 x64ボックスから収集しました。私は先に進み、インストールを検出するために検索するこれらのすべてのバージョンとregキーをダンプします。
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
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
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
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
)には、ATLおよびMFCバイナリ用のバージョン11.0.60610.1
があり、他のすべて、たとえばmsvcp110.dllおよびmsvcr110.dll用の11.0.51106.1
があります ...」
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
代替手段として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
代替手段として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
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
警告:Visual C++ 2019に使用される別の新しいレジストリ規則があります。また、Visual C++ 2019のスタンドアロンインストーラーではなく、このバンドルインストーラーがVisual C++ 2015〜2019であるようです。
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
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
Changelog:
2019年6月13日-2015-2019バンドルバージョン14.21.27702
の新しいセクションを追加し、追加しました 小さなメモ 新しいバンドルの使用を代替手段として検討することに関する2015年と2017年のセクションへ。
2018年12月14日-Jim Wolffの調査結果に応じて、Service Pack 1の9.0.30729.6161
更新用にMSVC2008を更新
2018年11月27日-MSVC2017 v。14.16
の情報を更新しました
2018年9月12日-Wai Ha Leeの調査結果による2012 Update 4にバージョン警告を追加
2018年8月24日-2017年のバージョンを14.15.26706に更新、VS 2017 15.8.1にパッケージ化された更新されたVisual C++依存関係
2018年5月16日-2017年バージョンの14.14.26405.0を新しいC++ 2017エントリとして更新
2017年9月8日-新しいVisual C++ 2017エントリとして、2017のバージョンを14.11.25325.0に更新しました
2017年4月7日-2017年のバージョン14.10.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の情報を更新
これらのいずれかが古くなった場合は、こちらからご連絡ください。
試して
HKLM\SOFTWARE\Microsoft\DevDiv\VC\Servicing\11.0
出発点として。これをVC++ 11(VS 2012)ランタイムをインストールするためのチェックとして使用します。
次のレジストリの場所で、Installed
の値が1
であることを確認できます。64ビットシステムではHKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\11.0\VC\Runtimes\x86
。レジストリキー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
Visual C++に同梱されているブートストラップパッケージマニフェストには、installcheck要素はありません。前提条件として設定した場合、Microsoftは常にインストールしたいと思います。
もちろん、MsiQueryProductStateを呼び出して、VC redistパッケージがMSIを介してインストールされているかどうかを確認できます。パッケージコードは、
wmic product get
コマンドラインで、または既にwmic:root\cliにいる場合は、実行します
product where "Caption like '%C++ 2012%'"
残念ながら、この単純な質問に対する答えは単純なものではありませんが、すべてのシステムの100%で動作し、多数の.netフレームワークにまで拡張可能です。
複雑さは、多くのVCランタイムリビジョンがあり、VC10ランタイムがインストールされていても、ビルド番号が十分ではなかったためにEXEが起動しないという事実に起因する必要な非常に正確なランタイムをインストールするか、同じメジャーバージョンのこのバージョンと以前のバージョンを一緒に実行できるようにする新しいランタイムのいずれかをインストールしない限り(サイドバイサイドヘル)。また、64ビットEXEがある場合は、32ビットと64ビットの両方のランタイムを確認する必要があります。
つまり、EXEのランタイムがインストールされているかどうかを判断する唯一の信頼できる方法は、EXE-またはビルドされた別のEXEを実行しようとすることですメインEXEと同じ設定で、唯一の目的は実行することです-何もありません。ただ実行する(ランタイムがインストールされることを意味する)か、実行に失敗する(インストールされていない場合)。
VC10 32ビットおよび64ビットランタイムのインストールを必要とするインストーラーに対して以下を実行しました。インストーラーはすべてのダミーEXEを起動しようとし、成功すると、対応するランタイムがインストールされたと見なされます。これにより、32/64ビットのシナリオも解決されます。
ちなみに、これは適切な.netフレームワークがインストールされているかどうかを判断するためにも機能します。Windows8および10では、ダウンロード可能な組み込み.net 3.5サポートが.netバージョン3.0および2.0もサポートしているため、非常に注意が必要です。これらのレジストリエントリはありません。 (さらに悪いことに、ここで標準のフレームワークインストーラーを使用することさえできません。must組み込みサポートを使用してWindows経由でダウンロードするか、.net 4でアプリを再構築しますが、それは別の話です)。
C++ダミーEXEは、次のコード(および必要に応じて64ビット構成の別のコード)を持つプロジェクトを使用してビルドできます。
int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}
プロジェクトのプロパティMFCの使用を共有DLLで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
次に、ランタイムチェックを起動します。 Welcomeページを離れて結果をキャッシュするため、ユーザーが[戻る]および[次へ]ボタンをクリックするたびに再確認する必要はありません。
次に、インストールツリーに読み取り専用セクションを作成し、Componentsページが表示される前に実行される関数で事前選択または選択解除します。
これにより、不足している各ランタイムコンポーネントのインストールが必須になり、既に存在する場合はスキップされます。
Visual Studio 2010以降はWinSxSの使用を停止したため、%windir%\ system32\msvcr110.dllをチェックするだけで十分な場合があります。十分な新しいバージョンがあることを確認する場合は、ファイルバージョンが11.0.50727.1(VS2012 RTM)か11.0.51106.1(VS2012 Update 1)かを確認できます。
WiXが作成したMSIインストーラーの一部として再配布可能なVisual C++をチェックするという文脈で答えを探しているときにこの質問に出会いました。
GUIDがバージョンやオペレーティングシステムによってどのように変化するかが気に入らなかったので、C#で記述されたカスタムアクションを作成して、Visual 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>
Editこの回答は、カスタムアクションの作成と使用に関する基本情報で更新しています。
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 もご覧になれます。
私にとって、この場所は機能しました:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DevDiv\vc\Servicing\11.0\RuntimeMinimum\Version
パッケージをインストールした後のバージョンを確認し、インストーラーの条件として使用します。 (VCredをインストールすると、鉱山は11.0.50727に設定されます)。
[コントロールパネル]> [プログラムと機能]に移動すると、すべてが表示されます。
私は専門家ではなく、この答えは人々が答えているものと比べて非常に簡単です(レジストリをチェックする)ので、それが正しい答えであるかどうかはわかりませんが、私にとってはトリックをしました。
MsiQueryProductState を使用して製品のインストール状態を確認することは、レジストリを直接確認することとほとんど同等ですが、 ProductCode にはGUIDが必要です。
他の場所で述べたように、これらのアプローチの1つの欠点は、各更新プログラムに独自のProductCodeがあることです!
ありがたいことに、MSIは pgradeCode を提供し、製品の「ファミリ」を識別します。 orcaを使用してMSIの1つを開き、この情報を抽出できます。たとえば、VS2015の再頒布可能パッケージのUpgradeCodeは{65E5BD06-6392-3027-8C26-853107D3CF1A}
です
MsiEnumRelatedProducts を使用して、そのUpgradeCodeのすべての製品IDを取得できます。実際には、各redistの更新は前の更新を置き換えるため、VS2015 Update 2 x86の{B5FC62F5-A367-37A5-9FD2-A6E137C0096F}
などのProductCodeが1つだけ生成されます。
とにかく、 MsiGetProductInfo (productCode、INSTALLPROPERTY_VERSIONSTRING、...)または同様の関数を使用してバージョンをチェックし、同等のバージョンまたはそれ以降のバージョンをチェックするなど、必要なバージョンと比較できます。
C++アプリケーション内では、_VC_CRT_MAJOR_VERSION
を使用する場合は_VC_CRT_MINOR_VERSION
、_VC_CRT_BUILD_VERSION
、#include <crtversion.h>
も使用できることに注意してください。この方法で、バイナリが構築されたCRTバージョンを計算できます。
InnoSetupでこれを行うことに成功しました。
レジストリキーの存在を確認しました。
HKLM\SOFTWARE\Microsoft\VisualStudio\11.0\VC\Runtimes
アンインストールした場合、存在しません。インストールされている場合、存在します。
ちなみに、Wow6432Nodeにもあります。
HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\11.0\VC\Runtimes
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
このPowerShellコードはトリックを行う必要があります
Get-ItemProperty
HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* |
Select-Object DisplayName, DisplayVersion, Publisher, InstallDate |
Format-Table –AutoSize
私は同じことを必要としていましたが、私の知る限り、これはプログラムで行うことはできませんが、私にとってはうまくいきました。
[スタート]-> [プログラムのアンインストール]に移動し、バージョン番号を含むVC++再配布可能ファイルが見つかるまでスクロールダウンしました。バージョン番号をググリングして、VS2012 SP1に属していると教えてくれました。
古い質問ですが、ここに、Visual Studio 2005以来成功してきたアプローチがあります。 Visual Studio 2012 Update 4も使用してテストしました(最終的に2010から2012にソフトウェアを更新するため)。
Visual C++再頒布可能パッケージは、Windowsにアンインストーラーを登録するため(コントロールパネルの[プログラムと機能]リストに表示されるため)、レジストリーでアンインストーラーキーの表示名を確認するだけです。
関連する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以上のマシンで機能し、2005、2010、2010sp1、および2012u4のredistsを使用してXP/XP64からWindows 10までのすべての種類のウィンドウを実行しています。
のInstalled
値を確認します
HKLM\SOFTWARE\[WOW6432Node]\Microsoft\Windows\CurrentVersion\Uninstall\{VCRedist_GUID}
キー
VC++ 2012 (x86)
のGUIDは{33d1fd90-4274-48a1-9bc1-97e33d9c2d6f}
ですWOW6432Node
が存在するかどうかは、VC++ redist
製品によって異なりますPowerShellスクリプトソリューション:
@kayleeFrye_onDeckからの回答の情報に基づいて
ユーザーが指定したバージョンをチェックしてインストールするPowerShellスクリプトを作成しましたが、広範なテストは行っていませんが、私自身のCI(Continuous Integration)シナリオでは完全に機能します。
github に関する完全なスクリプトと情報
私が使用したアプローチは、ここで提供された情報に基づいてレジストリキーをチェックすることに基づいていました。以下は、スクリプトの機能の概要です。
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
}
}
KayleeFrye_onDeckからのコンパイルされた情報を含む$redistInfo
に基づいたチェック/ダウンロード/サイレントインストール。
$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 にあります。
時間があれば、スクリプトのより広範なテストを行い、ここに情報が追加されるので、新しいパッケージを追加しようとし続けます。
ほとんどの人が見逃しているのは、Windows x64でキーをチェックするために必要な/reg:32
です。
このテーマの Microsoftヘルプ記事 を参照してください。
Visual Studio 2012 Update 4のVisual C++ Redistributableを正しく確認する方法を示すスクリプトを次に示します。
@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