Mendeteksi jika Visual C ++ Redistributable untuk Visual Studio 2012 diinstal

109

Bagaimana cara mendeteksi jika Visual C ++ Redistributable untuk Visual Studio 2012 diinstal?

Saya mencoba Google dan tidak ada yang menanyakan pertanyaan ini, kejutan!

sean717
sumber
1
Mengapa tidak menghapus ketergantungan tersebut dengan menyetel Runtime library di C ++> Pembuatan kode ke Multi-threaded [debug], bukan Multi-threaded [debug] dll? Saya baru saja memecahkan masalah instalasi runtime redist hanya dengan menghapus dependecy.
Cem Kalyoncu
Saya menemukan cara mendeteksi paket dengan trial and error. Saya berharap ada peluru ajaib, tetapi jika ada, saya belum menemukannya. Saya mendapat jawaban di bawah untuk beberapa redist spesifik yang tampaknya berfungsi 100% dari waktu untuk membantu sebagian besar saat ini .
kayleeFrye_onDeck
3
Harap pertimbangkan untuk mengubah jawaban yang diterima menjadi satu dengan kayleeFrye_onDeck. Saya telah menghabiskan waktu lama untuk mencari metode yang dapat diandalkan dan ini tampaknya menjadi satu-satunya, saya pikir dengan semua jawaban tidak dapat diandalkan lainnya ini akan membantu banyak orang untuk menemukan informasi yang benar
musefan
Tampaknya ada pembaruan untuk Visual Studio 2017 runtime: 14.10.V25017. Tautan: go.microsoft.com/fwlink/?LinkId=746572 Bisakah Anda memperbarui nilai registri?
karel vergauwe

Jawaban:

172

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 .:


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 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


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 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


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 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


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 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.1untuk biner ATL dan MFC, dan 11.0.51106.1untuk yang lainnya, misalnya msvcp110.dll dan 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 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


Visual C ++ 2015

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


Visual C ++ 2017

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


Visual C ++ 2019 ( bundel 2015-2019 )

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.27702dan 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.6161sesuai 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.

kayleeFrye_onDeck
sumber
4
Ini sempurna. Ini adalah satu-satunya yang saya temukan yang tidak memberikan positif palsu ketika Visual Studio diinstal atau runtime dihapus.
AN
2
GUID VS2015 Pre Update 1 adalah {74d0e5db-b326-4dae-a6b2-445b9de1836e} sehingga Anda dapat menggunakan mekanisme ini. Untuk setiap pembaruan di masa mendatang! Meluncurkan VCRedist Pembaruan 1 sebelumnya dengan Pembaruan 1 diinstal memberi saya kesalahan - jadi saya akan menggunakan kunci reg penginstal VC - yang tampaknya baik-baik saja jika Anda menggunakan VCRedist?
GilesDMiddleton
4
sayangnya ini tidak berisi VCREDIST 14.0 Update 2 - bagaimana kita menangani kompatibilitas maju (mendeteksi versi runtime yang sama yang lebih baru dan berhasil)
Shaun Wilson
2
@ ManjunathBabu, saya tidak percaya ada dokumentasi eksternal tentang konvensi registri untuk penginstal Visual C ++ yang dapat didistribusikan ulang. Saya baru saja memperhatikan bahwa mereka tampaknya benar-benar mengikuti sesuatu yang menyerupai skema kali ini untuk tahun 2017, alih-alih hanya melempar GUID lain ke suatu tempat tanpa nama kunci orang tua yang berarti. Sejauh ini, mereka telah menggunakan lokasi ini untuk semua pemasang yang dirilis untuk 2017: [HKEY_CLASSES_ROOT\Installer\Dependencies\,,x86,14.0,bundle\Dependents\{$GUID}dan[HKEY_CLASSES_ROOT\Installer\Dependencies\,,amd64,14.0,bundle\Dependents\{$GUID}
kayleeFrye_onDeck
2
Paket baru Visual C ++ 2017 mengubah lintasan registri (Versi 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

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).

Dave Dawkins
sumber
7
HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ DevDiv \ vc \ Servicing \ 11.0 \ RuntimeMinimum \ Install harus disetel ke 1
Alex Spence
3
Untuk 32-bit (alias x86), kuncinya terletak di:HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\DevDiv\VC\Servicing\11.0\RuntimeMinimum
CodeFox
@kayleeFrye_onDeck sudahkah Anda menemukan cara melakukan ini? Saya masih mencari cara yang dapat diandalkan juga, tetapi tidak ada jawaban di halaman ini yang berhasil untuk saya
AN
Jawaban yang lebih baik daripada yang diterima karena tidak bergantung pada paket UUID, kemungkinan besar akan berubah untuk setiap patch yang disediakan Microsoft
jpo38
25

Anda dapat memeriksa Installednilai yang ada 1di lokasi registri ini: HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\11.0\VC\Runtimes\x86pada 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

Mike de Klerk
sumber
Saya memiliki mesin Win7 32-bit dengan runtime 2012 VC ++ terinstal dan saya tidak memiliki kunci reg ini.
BryanJ
Anda yakin tidak memiliki `HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ VisualStudio \ 11.0 \ VC`? Apa yang kamu punya?
Mike de Klerk
2
Saya punya HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\11.0\VCtapi saya tidak punya Runtimeskuncinya. Saya memiliki kunci dalam jawaban Dave HKLM\SOFTWARE\Microsoft\DevDiv\VC\Servicing\11.0.
BryanJ
@BryanJ Aneh bahwa setiap sistem bisa sangat berbeda ... Terima kasih telah menambahkan info berguna ini
Mike de Klerk
3
Cerita lucu dan tidak ada info nyata dari MS. Saya pikir Anda memiliki jawaban terbaik yang saya lihat sejauh ini. Diuji untuk menginstal vcredist pada VM baru relativley dan ini adalah satu-satunya kunci yang saya temukan setelahnya. Jadi jempol dari sisi saya ...
anhoppe
12

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%'"
Sheng Jiang 蒋 晟
sumber
10

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.

Michael
sumber
Terima kasih atas tip yang membantu, apakah Anda ingat jenis proyek apa yang harus dibuat? VS memiliki banyak pilihan untuk dipilih :-).
greenoldman
9

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).

BCran
sumber
+1 ini lebih sederhana dan lebih mudah dilakukan. Semua kunci registri baik-baik saja dan semacamnya, tetapi jika pengguna mengacaukan sistem dan menghapus pnidui.dll, pemeriksaan registri tidak berguna. Sebaiknya periksa semua komponen yang Anda butuhkan (msvcr110.dll, msvcp110.dll, mfc, ...). Dan untuk update 3 versinya adalah 11.0.60610.1.
stijn
ok abaikan bit terakhir itu: tampaknya hanya penginstalnya adalah 11.0.60610.1, versi dll crt masih 11.0.51106.1
stijn
ya .dll adalah 11.0.51106.1 meskipun saya telah menginstal vs2012 sp4
Blub
Ini tidak akan berhasil. Saya mencopot pemasangan 2005-2015, dan saya masih memiliki file pnidui untuk 60, 100, 110, 120, dan 140 di sana.
kayleeFrye_onDeck
Perhatikan bahwa binari yang disertakan dengan VC ++ 2012 update 4 ( 11.0.61030.0) memiliki versi 11.0.60610.1untuk binari ATL dan MFC, dan 11.0.51106.1untuk 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_x86dan C:\ProgramData\Package Cache\{B175520C-86A2-35A7-8619-86DC379688B9}v11.0.61030\packages\vcRuntimeAdditional_x86kemudian memeriksa file dalam file .cab.
Wai Ha Lee
5

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 Installerdan 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

TJ Rockefeller
sumber
4

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).

attila
sumber
Jawaban ini persis seperti yang kami cari (dibandingkan jawaban lain di sini, yang kurang tentang runtime, dan lebih banyak tentang Visual studio, sayangnya.)
Shaun Wilson
Jawaban ini tidak berfungsi, karena kunci ini ada setelah Anda menghapus redist.
kayleeFrye_onDeck
4

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.

Program dan fitur

Adrian Pauly
sumber
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
Al.Pertro
sumber
3

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

Fandi Susanto
sumber
Ini tidak benar. Kunci ada di kedua lokasi saat dicopot.
kayleeFrye_onDeck
1
@kayleeFrye_onDeck Ya ... Saya harus setuju dengan Anda. Namun nyatanya, saat pertama kali mencobanya, ternyata berhasil. Tapi baru-baru ini seperti yang Anda katakan. Saya tidak tahu kenapa bisa seperti itu.
Fandi Susanto
3

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_VERSIONjika Anda #include <crtversion.h>- cara ini Anda dapat menentukan menghitung versi CRT yang biner Anda dibangun dengan.

adzm
sumber
Bagaimana Anda mendapatkan informasi ini? Dan apakah itu Kode Upgrade untuk versi x86 atau versi x64?
Ben Key
Anda dapat menggunakan Orca untuk membuka msi dan mengekstrak Kode Upgrade. Yang diberikan di sini setidaknya untuk x86. Mengenai dari mana saya mendapatkan informasi lainnya, ini adalah sumber utama; Saya tidak dapat menemukan referensi lain untuk pendekatan ini secara online terkait redist secara khusus, tetapi pola UpgradeCode / family sama dengan installer MSI.
adzm
Saya sadar akan Orca. Masalahnya berkaitan dengan mendapatkan MSI itu. Saya tidak tahu cara mengaksesnya secara langsung. Satu-satunya cara yang saya tahu adalah dengan menemukannya di direktori c: \ Windows \ Installer. Saya memiliki lebih dari 1.000 file di direktori itu. File-file tersebut diberi nama secara acak. Satu-satunya cara untuk menentukan MSI mana yang benar adalah dengan melihat deskripsinya. Ini melibatkan menekan Alt + Enter pada 1.000 file di explorer atau menggunakan alat untuk membuang deskripsi 1.000 file.
Ben Key
Ahh begitu. Anda juga dapat mencari registri untuk menemukan jalur atau bahkan kode pemutakhiran jika Anda mengetahui kode produk, dalam HKLM \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Installer \ UpgradeCodes. Namun Anda mungkin perlu menggunakan WMIC (atau akses programatik lain ke msi db) untuk mencari tahu sisanya. wmic product get / format: csv akan membuang csv yang dapat Anda cari - ia memiliki jalur msi dalam nilai yang dikembalikan. Anda dapat menulis skrip yang lebih baik, saya yakin, tetapi ini seharusnya cukup untuk membantu Anda melanjutkan.
adzm
3

Kode PowerShell ini harus melakukan triknya

Get-ItemProperty
HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | 
Select-Object DisplayName, DisplayVersion, Publisher, InstallDate |
Format-Table AutoSize
Ernie C.
sumber
karena hardcode sekumpulan kode produk tidak akan berhasil, kami juga menghitung registri yang memeriksa "nama produk" dari setiap entri dengan regex, kami kemudian memeriksa VersionMajor / VersionMinor (yang sangat kami pedulikan) ini memiliki nilai untuk memungkinkan kami membuat satu build dan mengetahui bahwa build tersebut akan terus berfungsi selama masa layanan versi vcredist tertentu. maksudnya di sini tepat, tetapi mungkin memerlukan transliterasi untuk kumpulan alat seperti pemasang berbasis NSIS atau WinAPI.
Shaun Wilson
2

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.

bavaza
sumber
2

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.

kinar
sumber
1

Saya akan memeriksa Installednilai

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

  • dimana GUID-nya VC++ 2012 (x86)berada{33d1fd90-4274-48a1-9bc1-97e33d9c2d6f}
  • WOW6432Nodeakan ada atau tidak tergantung pada VC++ redistproduknya
Pelajar
sumber
0

Apa yang kebanyakan orang lewatkan adalah keharusan /reg:32untuk 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
perang59312
sumber
0

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 $redistInfoyang 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.

Jim Wolff
sumber
0

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;
ssamko
sumber
-5

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 ......

Vikky
sumber
1
Saya telah menulis bahwa di baris pertama "Saya tidak memiliki VS2012". Jadi tidak perlu mengomentari ini ............. Dan ini hanya untuk
vs2010
1
Anda memang mencatat itu, tetapi sepertinya Anda menyarankan bahwa solusi Anda dapat berfungsi untuk VS2012 juga karena itu adalah pertanyaan OP (tetapi tidak dapat memverifikasi karena Anda tidak memiliki VS2012). Saya hanya menyatakan bahwa pendekatan ini sebenarnya tidak berfungsi dengan VS2012 sejak saya memeriksanya.
StellarEleven
Mengapa tidak memilih jawaban saya ...... Saya telah menulis dengan jelas bahwa ini untuk vs2012 ... dan ini diterima sebagai jawaban oleh pengguna .... jadi mengapa ???????????
vikky
1
Tampaknya dengan OS x64 bit nilai ini terletak diHKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\10.0\VC\VCRedist\...
bas
1
Kunci VS 2012 adalah HKLM \ SOFTWARE \ Microsoft \ VisualStudio \ 11.0 \ VC \ RunTimes ____ HKLM \ SOFTWARE \ Wow6432Node \ Microsoft \ VisualStudio \ 11.0 \ VC \ RunTimes ___
Adam L