Visual C ++ Redistributable for Visual Studio 2012がインストールされているかどうかを検出する方法
私はそれをグーグルで試しました、そして誰もこの質問をしていません、驚き!
Visual C ++ Redistributable for Visual Studio 2012がインストールされているかどうかを検出する方法
私はそれをグーグルで試しました、そして誰もこの質問をしていません、驚き!
回答:
使用しているバージョンによって異なります。これらの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
)に付属するバイナリに11.0.60610.1
は、ATLおよびMFCバイナリ用のバージョンと、11.0.51106.1
その他すべてのバージョンがあります。たとえば、msvcp110.dllやmsvcr110.dllです。 ……」
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
直接ダウンロード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で使用されている別の新しいレジストリ規則があります。また、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の情報を更新
これらのいずれかが古くなった場合は、こちらからご連絡ください。
[HKEY_CLASSES_ROOT\Installer\Dependencies\,,x86,14.0,bundle\Dependents\{$GUID}
と[HKEY_CLASSES_ROOT\Installer\Dependencies\,,amd64,14.0,bundle\Dependents\{$GUID}
[HKEY_CLASSES_ROOT\Installer\Dependencies\VC,redist.x86,x86,14.16,bundle] [HKEY_CLASSES_ROOT\Installer\Dependencies\VC,redist.x64,amd64,14.16,bundle]
試す
HKLM\SOFTWARE\Microsoft\DevDiv\VC\Servicing\11.0
出発点として。これは、VC ++ 11(VS 2012)ランタイムをインストールするためのチェックとして使用します。
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\DevDiv\VC\Servicing\11.0\RuntimeMinimum
このレジストリの場所にあるInstalled
値を確認でき1
ます:HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\11.0\VC\Runtimes\x86
64ビットシステム。レジストリキーへのアクセスを引き起こすコード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
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\11.0\VC
がRuntimes
鍵を持っていない。デイブの答えに鍵がありますHKLM\SOFTWARE\Microsoft\DevDiv\VC\Servicing\11.0
。
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が起動しません。必要な正確なランタイム、または同じメジャーバージョンのこのバージョンと以前のバージョンを一緒に実行できるようにする新しいランタイムの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
次に、実行時チェックを起動します。たとえば、ようこそページを離れて結果をキャッシュする場合、ユーザーが「戻る」および「次へ」ボタンをクリックするたびに再チェックする必要はありません。
次に、インストールツリーに読み取り専用セクションを作成し、[ コンポーネント]ページが表示される前に実行される関数で、そのセクションを事前選択または選択解除します。
これにより、欠落している各ランタイムコンポーネントのインストールが必須となり、すでに存在する場合はスキップされます。
Visual Studio 2010以降ではWinSxSの使用を停止したため、%windir%\ system32 \ msvcr110.dllを確認するだけで十分な場合があります。十分に新しいバージョンであることを確認する場合は、ファイルのバージョンが11.0.50727.1(VS2012 RTM)か11.0.51106.1(VS2012 Update 1)かを確認できます。
11.0.61030.0
)に付属するバイナリに11.0.60610.1
は、ATLおよびMFCバイナリ用のバージョンと、11.0.51106.1
msvcp110.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ファイル内のファイルを検査します。
私は、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もご覧ください。
私にとってこの場所は機能しました:HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ DevDiv \ vc \ Servicing \ 11.0 \ RuntimeMinimum \ Version
パッケージをインストールした後のバージョンを確認し、それをインストーラーの条件として使用します。(私はVCredをインストールした後に11.0.50727に設定されています)。
[コントロールパネル]> [プログラムと機能]に移動すると、それらすべてがリストに表示されます。
私は専門家ではありません。この回答は、人々が回答しているもの(レジストリをチェックする)に比べてかなり単純なので、それが正しい答えかどうかはわかりませんが、私にとってはうまくいきました。
私はこれをInnoSetupで成功させました。
レジストリキーの存在を確認しました。
HKLM\SOFTWARE\Microsoft\VisualStudio\11.0\VC\Runtimes
アンインストールした場合は存在しません。インストールされている場合は存在します。
ちなみに、それはWow6432Nodeにもあります。
HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\11.0\VC\Runtimes
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のバージョンを確認することができます- 。
このPowerShellコードでうまくいくはずです
Get-ItemProperty
HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* |
Select-Object DisplayName, DisplayVersion, Publisher, InstallDate |
Format-Table –AutoSize
古い質問ですが、ここでは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の再配布を使用して実行しています。
ほとんどの人が見逃しているのは、/reg:32
Windows 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
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
}
}
$redistInfo
kayleeFrye_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にあります
情報があればここに追加するので、スクリプトのより広範なテストを行い、新しいパッケージを追加しようとする時間があれば、どなたでもご参加いただけます。
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;
レジストリで検索できます。実際には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
そのためにレジストリ機能を使用できます......
HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\10.0\VC\VCRedist\...