Bagaimana cara mendeteksi jika Visual C ++ Redistributable untuk Visual Studio 2012 diinstal?
Saya mencoba Google dan tidak ada yang menanyakan pertanyaan ini, kejutan!
visual-c++
sean717
sumber
sumber
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 .:
Visual C ++ 2005
URL Unduh Langsung: https://download.microsoft.com/download/8/B/4/8B42259F-5D70-43F4-AC2E-4B208FD8D66A/vcredist_x64.EXE
URL Unduh Langsung: https://download.microsoft.com/download/8/B/4/8B42259F-5D70-43F4-AC2E-4B208FD8D66A/vcredist_x86.EXE
Visual C ++ 2008
URL Unduh Langsung: https://download.microsoft.com/download/2/d/6/2d61c766-107b-409d-8fba-c39e61ca08e8/vcredist_x64.exe
URL Unduh Langsung: https://download.microsoft.com/download/d/d/9/dd9a82d0-52ef-40db-8dab-795376989c03/vcredist_x86.exe
Visual C ++ 2010
URL Unduh Langsung: https://download.microsoft.com/download/1/6/5/165255E7-1014-4D0A-B094-B6A430A6BFFC/vcredist_x64.exe
URL Unduh Langsung: https://download.microsoft.com/download/1/6/5/165255E7-1014-4D0A-B094-B6A430A6BFFC/vcredist_x86.exe
Visual C ++ 2012
URL Unduh Langsung: https://download.microsoft.com/download/1/6/B/16B06F60-3B20-4FF2-B699-5E9B7962F9AE/VSU_4/vcredist_x64.exe
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 versi11.0.60610.1
untuk biner ATL dan MFC, dan11.0.51106.1
untuk yang lainnya, misalnya msvcp110.dll dan msvcr110.dll . .. "Visual C ++ 2013
URL Unduh Langsung: https://download.microsoft.com/download/2/E/6/2E61CFA4-993B-4DD4-91DA-3737CD5CD6E3/vcredist_x64.exe
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
URL Unduh Langsung: https://download.microsoft.com/download/6/A/A/6AA4EDFF-645B-48C5-81CC-ED5963AEAD48/vc_redist.x64.exe
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.
URL Unduh Langsung: https://download.visualstudio.microsoft.com/download/pr/9fbed7c7-7012-4cc0-a0a3-a541f51981b5/e7eec15278b4473e26d7e32cef53a34c/vc_redist.x64.exe
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
URL Unduh Langsung: https://download.visualstudio.microsoft.com/download/pr/9e04d214-5a9d-4515-9960-3d71398d98c3/1e1e62ab57bbb4bf5199e8ce88f040be/vc_redist.x64.exe
URL Unduh Langsung: https://download.visualstudio.microsoft.com/download/pr/c8edbb87-c7ec-4500-a461-71e8912d25e9/99ba493d660597490cbb8b3211d2cae4/vc_redist.x86.exe
14.22.27821
URL Unduh Langsung: https://download.visualstudio.microsoft.com/download/pr/0c1cfec3-e028-4996-8bb7-0c751ba41e32/1abed1573f36075bfdfc538a2af00d37/vc_redist.x86.exe
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 Wolff27 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.
sumber
[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
sebagai titik awal. Saya akan menggunakan ini sebagai pemeriksaan untuk menginstal runtime VC ++ 11 (VS 2012).
sumber
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\DevDiv\VC\Servicing\11.0\RuntimeMinimum
Anda dapat memeriksa
Installed
nilai yang ada1
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 registriHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\11.0\VC\Runtimes\x86
. Perhatikan tidak adanyaWow6432Node
.Pada sistem 32-bit, registri tetap sama tanpa
Wow6432Node
:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\11.0\VC\Runtimes\x86
sumber
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\11.0\VC
tapi saya tidak punyaRuntimes
kuncinya. Saya memiliki kunci dalam jawaban DaveHKLM\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
di baris perintah, atau jika Anda sudah berada di wmic: root \ cli, jalankan
sumber
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):
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 ):
dan menyebutnya dalam sebuah fungsi, misalnya CheckRuntimes
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.
sumber
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).
sumber
11.0.61030.0
) memiliki versi11.0.60610.1
untuk binari ATL dan MFC, dan11.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 keC:\ProgramData\Package Cache\{BD95A8CD-1D9F-35AD-981A-3E7925026EBB}v11.0.61030\packages\vcRuntimeMinimum_x86
danC:\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.
Kemudian di file wxs
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
sumber
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).
sumber
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.
sumber
sumber
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
sumber
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.sumber
Kode PowerShell ini harus melakukan triknya
sumber
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.
sumber
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:
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.
sumber
Saya akan memeriksa
Installed
nilaiHKLM\SOFTWARE\[WOW6432Node]\Microsoft\Windows\CurrentVersion\Uninstall\{VCRedist_GUID}
kunciVC++ 2012 (x86)
berada{33d1fd90-4274-48a1-9bc1-97e33d9c2d6f}
WOW6432Node
akan ada atau tidak tergantung padaVC++ redist
produknyasumber
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.
sumber
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:
Pemeriksaan / pengunduhan / penginstalan diam-diam berdasarkan
$redistInfo
yang berisi informasi yang dikumpulkan dari kayleeFrye_onDeck.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.
sumber
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.
Dependensi:
sumber
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 ......
sumber
HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\10.0\VC\VCRedist\...