121

VisualStudio2012用のVisualC++再頒布可能パッケージがインストールされているかどうかを検出するにはどうすればよいですか?

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

4

21 に答える 21

189

使用しているバージョンによって異なります。これらの2つの2012キーは、アップデート4用にダウンロードする対応するバージョンでうまく機能しました。これらの登録場所の一部はOSに依存している可能性があることに注意してください。この情報は、 Windows10x64ボックスから収集しました。先に進んで、インストールを検出するために検索したこれらのredistバージョンと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アップデート4(11.0.61030.0)に付属するバイナリ11.0.60610.1には、ATLおよびMFCバイナリ、および11.0.51106.1その他すべてのバージョン(msvcp110.dllやmsvcr110.dllなど)があります。 ..」

追加の警告-2012Update4 :ユーザーごとにKrptodr VC ++ 2012 Update 4(x86)がGUIDの下に表示されます{95716cce-fc71-413f-8ad5-56c2892d4b3a}

VC ++ 2012 Update 4(x64)はGUIDの下に表示されます{a1909659-0a08-4554-8af1-2175904903a1}

^^提供されているGUIDは、インストーラーパッケージ用です。ただし、これらは、それぞれのアーチタイプの他の2つのGUIDに分岐します。詳細については、次のソースを参照してください。Microsoft VisualC++ランタイムがインストールされているかどうかを確認する方法


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


変更ログ
2021年10月26日-10月21日の調査結果をさらに明確にするために更新されました。
2021年10月21日-Krptodrの調査結果に従って、VC ++ 2012 Update 4(x86)および(x64)GUIDに関する追加の警告の詳細を追加しました。
2019年8月19日-2015-2019バンドルバージョンの新しいバージョンを追加しました
2019年6月13日-2015-2019バンドルバージョンの新しいセクションを追加し、新しい使用法の検討に関する2015および2017セクションに小さなメモ14.21.27702を追加しました代わりにバンドルします。 2018年12月14日-JimWolffの調査結果に従ってServicePack1の 更新のためにMSVC2008を更新しました2018年11月27日-MSVC2017vの情報を更新しました。
9.0.30729.6161
14.16
2018年9月12日-WaiHaLeeの調査結果に従って2012Update4にバージョン警告を追加しました2018年
8月24日-14.15.26706の2017年バージョンを更新しました。VS201715.8.1にパッケージ化された更新されたVisualC++依存関係
2018年5月16日- 2017年バージョンの14.14.26405.0を新しいC++2017エントリとして
更新2017年9月8日-2017年バージョンの14.11.25325.0を新しいVisualC++2017エントリ
として更新2017年4月7日-2017年バージョンの14.10.25008.0を新しいビジュアルとして更新C++2017エントリ
2016年10月24日-14.0.24215.1の2015年バージョン情報を
更新2016年8月18日-14.0.24212の2015年バージョン情報を更新
2016年5月27日-MSVC2015アップデート2の情報を更新

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

于 2015-12-10T19:02:32.273 に答える
31

試す

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

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

于 2013-01-28T14:30:43.420 に答える
29

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

32ビットシステムでは、レジストリは同じですが、次のことはありませんWow6432NodeHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\11.0\VC\Runtimes\x86

于 2013-02-14T15:28:12.733 に答える
13

VisualC++に同梱されているbootstrapperパッケージマニフェストにはinstallcheck要素はありません。前提条件として設定した場合、Microsoftは常にインストールしたいと考えています。

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

wmic product get

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

product where "Caption like '%C++ 2012%'"
于 2012-08-31T06:52:47.920 に答える
10

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

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

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

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

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

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

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

プロジェクトのプロパティUseofMFCを設定して、共有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

次に、たとえばウェルカムページを離れるときにランタイムチェックを起動し、結果をキャッシュします。これにより、ユーザーが[戻る]ボタンと[次へ]ボタンをクリックするたびに再チェックする必要がなくなります。

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

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

于 2014-11-12T10:05:20.780 に答える
9

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

于 2013-01-29T01:05:05.513 に答える
5

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

GUIDがバージョンやオペレーティングシステムによってどのように変化するかが気に入らなかったため、最終的にC#で記述されたカスタムアクションを作成して、VisualC++の再配布可能ファイルを確認しました。

以下のすべては、特に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 VisualStudio2017拡張機能がインストールされたVisualStudio2017でカスタムアクションを作成するために、プロジェクトテンプレートを使用してカスタムアクション(WiX v3用のC#カスタムアクションプロジェクト)を作成しました。

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

私が行ったもう1つのことは、プロジェクトが構築されている.NETFrameworkのバージョンを3.5に変更することでした。

あまり便利ではありませんでしたが、http://wixtoolset.org/documentation/manual/v3/wixdev/extensions/authoring_custom_actions.htmlもご覧いただけます。

于 2017-05-16T18:58:03.583 に答える
4

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

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

于 2013-09-19T13:08:59.890 に答える
4

[コントロールパネル]>[プログラムと機能]に移動するだけで、すべてがそこに一覧表示されます。

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

プログラムと機能

于 2014-11-25T19:21:43.863 に答える
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
于 2013-11-29T20:26:40.997 に答える
3

私はInnoSetupでこれを行うことに成功しました。

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

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

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

ちなみに、それはWow6432Nodeにもある可能性があります。

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

于 2015-01-09T08:00:19.837 に答える
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(productCode、INSTALLPROPERTY_VERSIONSTRING、...)または同様の関数を使用してバージョンをチェックし、必要なバージョンと比較できます。たとえば、同等またはそれ以降のバージョンをチェックできます。

C ++アプリケーション内では、、を使用することもできます_VC_CRT_MAJOR_VERSION_VC_CRT_MINOR_VERSIONこの_VC_CRT_BUILD_VERSION方法#include <crtversion.h>で、バイナリが構築されたCRTバージョンを計算することができます。

于 2016-06-24T15:17:12.707 に答える
3

このPowerShellコードはトリックを行う必要があります

Get-ItemProperty
HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | 
Select-Object DisplayName, DisplayVersion, Publisher, InstallDate |
Format-Table –AutoSize
于 2016-12-08T21:13:04.473 に答える
2

私は同じことを必要としていました、そしてAFAIKはこれをプログラムで行うことはできませんが、それは私のために働きました。

[スタート]->[プログラムのアンインストール]に移動し、バージョン番号を含むVC++再配布可能ファイルが見つかるまで下にスクロールしました。バージョン番号をグーグルで検索すると、VS2012SP1に属していることがわかりました。

于 2014-02-27T14:17:27.297 に答える
2

古い質問ですが、これがVisualStudio2005以降に成功して使用してきたアプローチです。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のredistを使用してXP/XP64からWindows10までのあらゆる種類のウィンドウを実行しています。

于 2015-08-26T06:53:38.950 に答える
1

Installedの値を確認します

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

  • ここで、GUIDVC++ 2012 (x86){33d1fd90-4274-48a1-9bc1-97e33d9c2d6f}
  • WOW6432NodeVC++ redist製品に応じて存在するかしないか
于 2017-02-02T16:40:56.103 に答える
0

ほとんどの人が見逃しているのは、/reg:32Windowsx64でキーを確認する必要があることです。

このテーマに関するMicrosoftヘルプの記事を参照してください。

これは、Visual Studio 2012Update4用のVisualC++再頒布可能パッケージを正しくチェックする方法を示すスクリプトです。

@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
于 2017-02-07T18:15:45.850 に答える
0

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

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

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

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

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

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をご覧ください。

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

于 2019-01-08T13:31:40.923 に答える
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;
于 2020-02-22T17:27:58.230 に答える
0

Server2019とWindows10のPowerShellにこのワンライナーを使用しています。これがどの程度下位互換性があるかわかりません。

Get-CimInstance -Class Win32_Product -Filter "Name LIKE '%Visual C++ %Redistri%'" | Select Name, Caption, Version
于 2021-03-29T21:06:08.870 に答える
-5

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

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

  • 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

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

于 2012-08-31T06:48:38.837 に答える