Bagaimana cara mendeteksi jika Visual C ++ Redistributable untuk Visual Studio 2012 diinstal?
Saya mencoba Google dan tidak ada yang menanyakan pertanyaan ini, kejutan!
Bagaimana cara mendeteksi jika Visual C ++ Redistributable untuk Visual Studio 2012 diinstal?
Saya mencoba Google dan tidak ada yang menanyakan pertanyaan ini, kejutan!
Jawaban:
Itu tergantung pada versi apa yang Anda gunakan. Kedua kunci 2012 ini telah bekerja dengan baik untuk saya dengan versi yang sesuai untuk diunduh untuk Pembaruan 4. Perlu diketahui bahwa beberapa lokasi reg ini mungkin bergantung pada OS. Saya mengumpulkan info ini dari kotak Windows 10 x64 . Saya hanya akan melanjutkan dan membuang semua versi redist ini dan kunci reg yang saya cari untuk mendeteksi instalasi .:
Microsoft Visual C++ 2005 Redistributable (x64)
Registry Key: HKLM\SOFTWARE\Classes\Installer\Products\1af2a8da7e60d0b429d7e6453b3d0182
Configuration: x64
Version: 6.0.2900.2180
URL Unduh Langsung: 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 Unduh Langsung: 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 Unduh Langsung: 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 Unduh Langsung: 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 Unduh Langsung: 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 Unduh Langsung: 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 Unduh Langsung: 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 Unduh Langsung: https://download.microsoft.com/download/1/6/B/16B06F60-3B20-4FF2-B699-5E9B7962F9AE/VSU_4/vcredist_x86.exe
versi peringatan : Menuruttemuanpengguna Wai Ha Lee , "... binari yang disertakan dengan VC ++ 2012 update 4 ( 11.0.61030.0
) memiliki versi 11.0.60610.1
untuk biner ATL dan MFC, dan 11.0.51106.1
untuk yang lainnya, misalnya msvcp110.dll dan 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 Unduh Langsung: 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 Unduh Langsung: https://download.microsoft.com/download/2/E/6/2E61CFA4-993B-4DD4-91DA-3737CD5CD6E3/vcredist_x86.exe
Pertimbangkan untuk menggunakan bundel 2015-2019 sebagai alternatif
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 Unduh Langsung: 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 Unduh Langsung: https://download.microsoft.com/download/6/A/A/6AA4EDFF-645B-48C5-81CC-ED5963AEAD48/vc_redist.x86.exe
Pertimbangkan untuk menggunakan bundel 2015-2019 sebagai alternatif
Peringatan : Ada konvensi registri 2017 yang baru sedang digunakan, atau belum diselesaikan. Seperti yang saya tebak, tombol paling atas dari:
[HKEY_CLASSES_ROOT\Installer\Dependencies\,,amd64,14.0,bundle]
dan
[HKEY_CLASSES_ROOT\Installer\Dependencies\,,x86,14.0,bundle]
dapat berubah, atau setidaknya memiliki GUID bersarang yang berbeda, saya akan menggunakan daftar kunci yang diakhiri dengan 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 Unduh Langsung: 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 Unduh Langsung: https://download.visualstudio.microsoft.com/download/pr/d0b808a8-aa78-4250-8e54-49b8c23f7328/9c5e6532055786367ee61aafb3313c95/vc_redist.x86.exe
Peringatan : Ada konvensi registri baru lainnya yang digunakan untuk Visual C ++ 2019. Tampaknya juga tidak ada penginstal mandiri untuk Visual C ++ 2019, hanya penginstal bundel ini yaitu Visual C ++ 2015 hingga 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 Unduh Langsung: 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 Unduh Langsung: 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 Unduh Langsung: 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 Unduh Langsung: https://download.visualstudio.microsoft.com/download/pr/cc0046d4-e7b4-45a1-bd46-b1c079191224/9c4042a4c2e6d1f661f4c58cf4d129e9/vc_redist.x64.exe
Changelog :
19 Agustus 2019 - Menambahkan versi baru versi bundel 2015-2019
13 Juni 2019 - Menambahkan bagian baru untuk versi bundel 2015-2019 14.21.27702
dan menambahkan catatan kecil ke bagian 2015 dan 2017 tentang mempertimbangkan penggunaan bundel baru sebagai alternatif.
14 Desember 2018 - Pembaruan MSVC2008 untuk pembaruan Paket Layanan 1 9.0.30729.6161
sesuai dengan temuan Jim Wolff
27 November 2018 - Info yang diperbarui untuk MSVC2017 v. 14.16
12 September 2018 - Penambahan versi peringatan ke Pembaruan 2012 4 per temuan Wai Ha Lee
24 Agustus, 2018 - Versi 2017 yang diperbarui untuk 14.15.26706, dependensi Visual C ++ yang diperbarui yang dikemas dengan VS 2017 15.8.1
16 Mei 2018 - Diperbarui versi 2017 untuk 14.14.26405.0 sebagai entri C ++ 2017 baru
8 September 2017 - Diperbarui versi 2017 untuk 14.11.25325.0 sebagai entri Visual C ++ 2017 baru
7 April 2017 - Diperbarui versi 2017 dari 14.10 .25008.0 sebagai entri Visual C ++ 2017 baru
24 Oktober 2016 - Diperbarui info versi 2015 untuk 14.0.24215.1
18 Agustus 2016 - Diperbarui info versi 2015 untuk 14.0.24212
27 Mei 2016 - Info yang diperbarui untuk MSVC2015 Pembaruan 2
Silakan hubungi saya di sini jika ada yang sudah ketinggalan zaman.
[HKEY_CLASSES_ROOT\Installer\Dependencies\,,x86,14.0,bundle\Dependents\{$GUID}
dan[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]
Mencoba
HKLM\SOFTWARE\Microsoft\DevDiv\VC\Servicing\11.0
sebagai titik awal. Saya akan menggunakan ini sebagai pemeriksaan untuk menginstal runtime VC ++ 11 (VS 2012).
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\DevDiv\VC\Servicing\11.0\RuntimeMinimum
Anda dapat memeriksa Installed
nilai yang ada 1
di lokasi registri ini: HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\11.0\VC\Runtimes\x86
pada sistem 64-bit. Dalam kode yang akan mengakibatkan mengakses kunci registri HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\11.0\VC\Runtimes\x86
. Perhatikan tidak adanya Wow6432Node
.
Pada sistem 32-bit, registri tetap sama tanpa Wow6432Node
:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\11.0\VC\Runtimes\x86
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\11.0\VC
tapi saya tidak punya Runtimes
kuncinya. Saya memiliki kunci dalam jawaban Dave HKLM\SOFTWARE\Microsoft\DevDiv\VC\Servicing\11.0
.
Tidak ada elemen installcheck dalam manifes paket bootstrapper yang dikirimkan dengan Visual C ++. Kira Microsoft ingin selalu menginstal jika Anda menetapkannya sebagai prasyarat.
Tentu saja Anda masih dapat memanggil MsiQueryProductState untuk memeriksa apakah paket redist VC diinstal melalui MSI, Kode paket dapat ditemukan dengan menjalankan
wmic product get
di baris perintah, atau jika Anda sudah berada di wmic: root \ cli, jalankan
product where "Caption like '%C++ 2012%'"
Sayangnya, jawaban atas pertanyaan sederhana ini bukanlah jawaban yang sederhana, tetapi berfungsi di 100% dari semua sistem, dan bahkan dapat diperluas ke berbagai kerangka kerja .net.
Kompleksitas berasal dari fakta bahwa ada (dan dulu) banyak revisi runtime VC yang dapat mengarah pada kasus bahwa meskipun runtime VC10 diinstal, nomor build-nya tidak cukup baru sehingga EXE Anda tidak akan mulai kecuali Anda menginstal runtime tepat yang Anda perlukan atau salah satu runtime baru yang memungkinkan versi ini dan versi sebelumnya untuk versi mayor yang sama untuk berjalan dengannya (neraka berdampingan). Selain itu, jika Anda memiliki EXE 64 bit, Anda harus memeriksa keduanya, runtime 32 DAN 64 bit.
Meskipun demikian, satu-satunya cara yang dapat diandalkan untuk menentukan apakah runtime untuk EXE Anda diinstal adalah dengan mencoba menjalankan EXE - atau EXE lain yang dibangun dengan pengaturan yang sama dengan EXE utama Anda dan yang tujuan satu-satunya adalah untuk tidak melakukan apa-apa. Jalankan saja (yang berarti runtime diinstal) atau gagal dijalankan (saat tidak diinstal).
Saya melakukan hal berikut untuk penginstal yang memerlukan runtime VC10 32 dan 64 bit diinstal: Penginstal mencoba meluncurkan semua dummy EXE dan jika berhasil, runtime terkait dianggap telah diinstal. Ini juga menyelesaikan skenario 32/64 bit.
Ngomong-ngomong, ini berfungsi juga untuk menentukan apakah kerangka kerja .net yang tepat diinstal, yang sangat rumit di Windows 8 dan 10, karena dukungan .net 3.5 bawaan yang dapat diunduh juga mendukung .net versi 3.0 dan 2.0 - di sana tidak ada entri registri untuk ini. (Dan lebih buruk lagi, Anda bahkan tidak dapat menggunakan penginstal kerangka standar di sini, Anda harus menggunakan dukungan bawaan dan mengunduhnya melalui Windows, atau membangun kembali aplikasi Anda dengan .net 4, tetapi itu cerita lain).
C ++ dummy EXE dapat dibangun menggunakan proyek dengan kode berikut (dan kode lainnya dalam konfigurasi 64 bit jika perlu):
int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}
Ingatlah untuk mengatur properti proyek Use of MFC ke Menggunakan MFC di DLL bersama . File yang dapat dieksekusi akan berukuran sekitar 4KB - harga kecil yang harus dibayar untuk hasil yang pasti.
Untuk memberikan pengalaman penginstalan yang menyenangkan bagi pengguna, Anda dapat melakukan hal berikut (kode contoh untuk NSIS ):
Function TryLaunchApplication
Pop $1 ; pathname
nsExec::Exec $1
Pop $0
${If} $0 == "error"
${OrIf} $0 != 0
Push 0
${Else}
Push 1
${EndIf}
FunctionEnd
dan menyebutnya dalam sebuah fungsi, misalnya 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
Kemudian luncurkan pemeriksaan runtime misalnya saat meninggalkan Selamat datang halaman dan cache hasilnya, jadi Anda tidak perlu memeriksa ulang setiap kali pengguna mengklik tombol "Kembali" dan "Berikutnya".
Selanjutnya, buat bagian hanya-baca di pohon penginstalan dan pilih sebelumnya atau batalkan pilihan pada fungsi yang dijalankan sebelum Komponen halaman ditampilkan.
Ini akan memastikan bahwa penginstalan setiap komponen runtime yang hilang adalah wajib, dan dilewati jika sudah ada.
Sejak Visual Studio 2010 dan yang lebih baru berhenti menggunakan WinSxS, mungkin cukup memeriksa% windir% \ system32 \ msvcr110.dll. Jika Anda ingin memverifikasi bahwa Anda memiliki versi yang cukup baru, Anda dapat memeriksa apakah versi file adalah 11.0.50727.1 (VS2012 RTM) atau 11.0.51106.1 (VS2012 Update 1).
11.0.61030.0
) memiliki versi 11.0.60610.1
untuk binari ATL dan MFC, dan 11.0.51106.1
untuk yang lainnya, misalnya msvcp110.dll dan msvcr110.dll. Tidak yakin kenapa. Anda dapat mengkonfirmasi hal ini (pada Windows 10 mesin saya sudah diuji pada) dengan pergi ke C:\ProgramData\Package Cache\{BD95A8CD-1D9F-35AD-981A-3E7925026EBB}v11.0.61030\packages\vcRuntimeMinimum_x86
dan C:\ProgramData\Package Cache\{B175520C-86A2-35A7-8619-86DC379688B9}v11.0.61030\packages\vcRuntimeAdditional_x86
kemudian memeriksa file dalam file .cab.
Saya menemukan pertanyaan ini mencari jawaban dalam konteks memeriksa Visual C ++ yang dapat didistribusikan ulang sebagai bagian dari penginstal MSI yang dibuat oleh WiX.
Saya tidak suka bagaimana GUID berubah dengan versi dan sistem operasi, jadi saya akhirnya membuat tindakan kustom yang ditulis dalam C # untuk memeriksa Visual C ++ yang dapat didistribusikan ulang.
Semua di bawah ini khusus untuk Visual C ++ 2015 Redistributable (x64), tetapi dapat dengan mudah dimodifikasi untuk versi apa pun.
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;
}
}
}
Kemudian di file 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 Saya memperbarui jawaban ini dengan beberapa info dasar tentang membuat dan menggunakan tindakan kustom.
Untuk membuat tindakan kustom di Visual Studio 2017 dengan ekstensi WiX Toolset Visual Studio 2017 diinstal, saya menggunakan template proyek untuk membuat tindakan kustom (C # Proyek Tindakan Kustom untuk WiX v3).
Saya memeriksa proyek yang dihasilkan dan tampaknya sudah memiliki perubahan yang tercantum di awal artikel ini: https://www.codeproject.com/Articles/132918/Creating-Custom-Action-for-WIX-Written-in-Managed jadi saya mengambil artikel itu di bagian tersebut Adding Custom Action to the Installer
dan mengikutinya dengan beberapa penyesuaian.
Satu hal lain yang saya lakukan adalah mengubah versi kerangka .NET yang menjadi dasar proyek menjadi 3.5.
Saya tidak merasa itu sangat berguna tetapi Anda juga dapat melihat http://wixtoolset.org/documentation/manual/v3/wixdev/extensions/authoring_custom_actions.html
Bagi saya lokasi ini berfungsi: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ DevDiv \ vc \ Servicing \ 11.0 \ RuntimeMinimum \ Version
Periksa versi apa yang Anda miliki setelah Anda menginstal paket dan gunakan itu sebagai kondisi di penginstal Anda. (milik saya diatur ke 11.0.50727 setelah menginstal VCred).
Cukup buka Panel Kontrol> Program dan Fitur, dan semuanya muncul terdaftar di sana.
Saya bukan ahli dan jawaban ini cukup sederhana dibandingkan dengan apa yang orang jawab (memeriksa registri), jadi saya tidak yakin apakah itu jawaban yang benar tetapi itu melakukan trik untuk saya.
Saya telah berhasil melakukan ini dengan InnoSetup.
Saya memeriksa keberadaan kunci registri:
HKLM\SOFTWARE\Microsoft\VisualStudio\11.0\VC\Runtimes
Jika dicopot, itu tidak ada. Jika dipasang, itu ada.
Omong-omong, bisa juga di Wow6432Node:
HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\11.0\VC\Runtimes
Memeriksa status penginstalan produk melalui MsiQueryProductState hampir sama dengan memeriksa registri secara langsung, tetapi Anda masih memerlukan GUID untuk ProductCode .
Seperti disebutkan di tempat lain, satu kelemahan dengan pendekatan ini adalah bahwa setiap pembaruan memiliki Kode Produknya sendiri!
Untungnya, MSI menyediakan UpgradeCode yang mengidentifikasi 'keluarga' produk. Anda dapat menggunakan orca untuk membuka salah satu MSI untuk mengekstrak informasi ini. Misalnya, UpgradeCode untuk VS2015 yang dapat didistribusikan ulang adalah{65E5BD06-6392-3027-8C26-853107D3CF1A}
Anda dapat menggunakan MsiEnumRelatedProducts untuk mendapatkan semua ID Produk untuk Kode Upgrade tersebut. Dalam praktiknya, karena setiap pembaruan redist menggantikan yang sebelumnya, ini hanya akan menghasilkan satu Kode Produk - seperti {B5FC62F5-A367-37A5-9FD2-A6E137C0096F}
untuk Pembaruan VS2015 2 x86.
Terlepas dari itu, Anda kemudian dapat memeriksa versi melalui MsiGetProductInfo (productCode, INSTALLPROPERTY_VERSIONSTRING, ...) atau fungsi serupa untuk membandingkan dengan versi yang Anda inginkan, misalnya untuk memeriksa versi yang setara atau lebih baru.
Perhatikan bahwa dalam C ++ aplikasi, Anda juga dapat menggunakan _VC_CRT_MAJOR_VERSION
, _VC_CRT_MINOR_VERSION
, _VC_CRT_BUILD_VERSION
jika Anda #include <crtversion.h>
- cara ini Anda dapat menentukan menghitung versi CRT yang biner Anda dibangun dengan.
Kode PowerShell ini harus melakukan triknya
Get-ItemProperty
HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* |
Select-Object DisplayName, DisplayVersion, Publisher, InstallDate |
Format-Table –AutoSize
Saya membutuhkan hal yang sama, dan meskipun AFAIK ini tidak dapat dilakukan secara terprogram, itu berhasil untuk saya.
Saya hanya pergi ke Start -> Uninstall program, dan menggulir ke bawah sampai saya menemukan VC ++ dapat didistribusikan ulang, yang menyertakan nomor versi. Googling nomor versi, memberi tahu saya bahwa itu milik VS2012 SP1.
Pertanyaan lama tetapi di sini adalah pendekatan yang kami gunakan sejak Visual Studio 2005 dengan sukses. Saya baru saja mengujinya menggunakan Visual Studio 2012 Update 4 juga (karena kami akhirnya memperbarui perangkat lunak kami dari 2010 hingga 2012).
Karena paket Visual C ++ Redistributable mendaftarkan uninstaller mereka dengan windows (sehingga muncul di daftar "Program dan Fitur" Control Panel), kami cukup memeriksa Nama Tampilan dari kunci uninstaller di registri.
Berikut adalah kode NSIS yang relevan:
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:
Perhatikan bahwa karena penginstal kami adalah exe 32bit, jendela menangani menentukan apakah kunci registri sebenarnya ada di Wow6432Node yang divirtualisasi daripada lokasi di atas sehingga kode di atas berfungsi pada penginstalan windows 64bit dan 32bit tanpa harus memeriksa kedua kunci secara eksplisit.
Perhatikan juga bahwa untuk memperbarui kode di atas ke versi lain dari VC ++ Redist, cukup ubah GUID di jalur kunci registri dan nama tampilan ke apa pun yang Anda butuhkan.
Meskipun ini mungkin bukan metode yang disarankan, Metode ini telah bekerja pada 10.000+ mesin selama 10 tahun terakhir menjalankan setiap jenis jendela dari XP / XP64 Melalui Windows 10 menggunakan redist untuk tahun 2005, 2010, 2010sp1, dan sekarang 2012u4.
Apa yang kebanyakan orang lewatkan adalah keharusan /reg:32
untuk memeriksa kunci pada Windows x64.
Lihat artikel Bantuan Microsoft tentang subjek ini.
Berikut adalah skrip yang menunjukkan cara memeriksa dengan benar Visual C ++ Redistributable untuk Visual Studio 2012 Update 4.
@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
Solusi skrip PowerShell:
Berdasarkan informasi dalam jawaban dari @kayleeFrye_onDeck
Saya telah membuat skrip PowerShell yang memeriksa dan menginstal versi yang ditentukan pengguna, saya belum melakukan pengujian ekstensif dengannya, tetapi untuk skenario CI (Continuous Integration) saya sendiri berfungsi dengan sempurna.
Skrip lengkap dan info di github
Pendekatan yang saya gunakan didasarkan pada pemeriksaan regkeys berdasarkan informasi yang diberikan di sini. Berikut ini adalah inti dari apa yang dilakukan skrip:
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
}
}
Pemeriksaan / pengunduhan / penginstalan diam-diam berdasarkan $redistInfo
yang berisi informasi yang dikumpulkan dari 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
}
Skrip lengkap dan informasi lebih lanjut dapat ditemukan di github
Siapapun dipersilakan untuk berkontribusi, jika saya punya waktu saya akan melakukan pengujian skrip yang lebih ekstensif dan terus mencoba menambahkan paket baru karena informasi ditambahkan di sini.
Sulit untuk mendapatkan semua nilai registri untuk VC 2012 jadi saya telah menulis sebuah fungsi kecil yang akan melalui semua ketergantungan dan cocok pada versi yang ditentukan.
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;
}
Dependensi:
using System.Text.RegularExpressions;
using Microsoft.Win32;
using System.Linq;
Anda dapat mencari di registry. Sebenarnya saya tidak memiliki vs2012 tetapi saya memiliki vs2010.
Ada 3 kunci registri yang berbeda (tetapi sangat mirip) untuk masing-masing dari 3 paket platform. Setiap kunci memiliki nilai DWORD yang disebut "Terpasang" dengan nilai 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
Anda dapat menggunakan fungsi registri untuk itu ......
HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\10.0\VC\VCRedist\...