Visual Studio 2012 için Visual C ++ Yeniden Dağıtılabilir'in yüklü olup olmadığı nasıl tespit edilir?
Google'ı denedim ve kimse bu soruyu sormadı, sürpriz!
Visual Studio 2012 için Visual C ++ Yeniden Dağıtılabilir'in yüklü olup olmadığı nasıl tespit edilir?
Google'ı denedim ve kimse bu soruyu sormadı, sürpriz!
Yanıtlar:
Hangi sürümü kullandığınıza bağlıdır. Bu iki 2012 anahtarı, Güncelleme 4 için indirmek üzere karşılık gelen sürümleriyle benim için iyi çalıştı. Lütfen bu kayıt konumlarından bazılarının işletim sistemine bağlı olabileceğini unutmayın. Bu bilgileri bir Windows 10 x64 kutusundan topladım . Kurulumu algılamak için aradığım tüm bu redist sürümlerini ve reg anahtarlarını dökeceğim:
Microsoft Visual C++ 2005 Redistributable (x64)
Registry Key: HKLM\SOFTWARE\Classes\Installer\Products\1af2a8da7e60d0b429d7e6453b3d0182
Configuration: x64
Version: 6.0.2900.2180
Doğrudan İndirme URL'si: 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
Doğrudan İndirme URL'si: 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])
Doğrudan İndirme URL'si: 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])
Doğrudan İndirme URL'si: 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
Doğrudan İndirme URL'si: 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
Doğrudan İndirme URL'si: 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
Doğrudan İndirme URL'si: 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
Doğrudan İndirme URL'si: https://download.microsoft.com/download/1/6/B/16B06F60-3B20-4FF2-B699-5E9B7962F9AE/VSU_4/vcredist_x86.exe
sürüm uyarısı : Kullanıcı başına Wai Ha Lee'nin bulguları, "... VC ++ 2012 güncelleme 4 ( 11.0.61030.0
) ile birlikte gelen ikili dosyalar 11.0.60610.1
ATL ve MFC ikili dosyaları 11.0.51106.1
için ve diğer her şey için, örneğin msvcp110.dll ve msvcr110.dll sürümüne sahiptir . .."
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
Doğrudan İndirme URL'si: 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
Doğrudan İndirme URL'si: https://download.microsoft.com/download/2/E/6/2E61CFA4-993B-4DD4-91DA-3737CD5CD6E3/vcredist_x86.exe
2015-2019 paketini alternatif olarak kullanmayı düşünün
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
Doğrudan İndirme URL'si: 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
Doğrudan İndirme URL'si: https://download.microsoft.com/download/6/A/A/6AA4EDFF-645B-48C5-81CC-ED5963AEAD48/vc_redist.x86.exe
2015-2019 paketini alternatif olarak kullanmayı düşünün
Uyarı : Kullanılan yeni bir 2017 kayıt defteri kuralı var veya henüz sonuçlandırılmadı. Tahmin ettiğim gibi en üstteki anahtarlar:
[HKEY_CLASSES_ROOT\Installer\Dependencies\,,amd64,14.0,bundle]
ve
[HKEY_CLASSES_ROOT\Installer\Dependencies\,,x86,14.0,bundle]
değişebilir veya en azından farklı iç içe geçmiş GUID'lere sahipse, GUID ile biten anahtarı listeyi kullanacağım.
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
Doğrudan İndirme URL'si: 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
Doğrudan İndirme URL'si: https://download.visualstudio.microsoft.com/download/pr/d0b808a8-aa78-4250-8e54-49b8c23f7328/9c5e6532055786367ee61aafb3313c95/vc_redist.x86.exe
Uyarı : Visual C ++ 2019 için kullanılan başka bir yeni kayıt defteri kuralı var. Ayrıca Visual C ++ 2019 için bağımsız bir yükleyici görünmüyor, yalnızca Visual C ++ 2015'ten 2019'a kadar olan bu paket yükleyici.
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
Doğrudan İndirme URL'si: 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
Doğrudan İndirme URL'si: 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
Doğrudan İndirme URL'si: 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
Doğrudan İndirme URL'si: https://download.visualstudio.microsoft.com/download/pr/cc0046d4-e7b4-45a1-bd46-b1c079191224/9c4042a4c2e6d1f661f4c58cf4d129e9/vc_redist.x64.exe
Değişiklik günlüğü :
19 Ağustos 2019 - 2015-2019 paket sürümünün yeni bir sürümü eklendi
13 Haziran 2019 - 2015-2019 paket sürümü için yeni bir bölüm 14.21.27702
eklendi ve 2015 ve 2017 bölümlerine kullanımın dikkate alınmasıyla ilgili küçük notlar eklendi alternatif olarak yeni paket.
14 Aralık 2018 - 9.0.30729.6161
Jim Wolff'un bulgularına göre Servis Paketi 1'in güncellemesi
için MSVC2008 güncellendi - 27 Kasım 2018 - MSVC2017 - 14.16
12 Eylül 2018 için güncellendi - Wai Ha Lee'nin bulguları başına 2012 Güncellemesi 4'e sürüm uyarısı eklendi
, 24 Ağustos, 2018 - VS 2017 15.8.1 ile paketlenmiş güncellenmiş Visual C ++ bağımlılıkları olan 14.15.26706 için 2017 sürümü güncellendi
16 Mayıs 2018 - Yeni C ++ 2017 girişi
olarak 14.14.26405.0 için 2017'nin sürümü güncellendi 8 Eylül 2017 - Yeni Visual C ++ 2017 girişi olarak 2017'nin 14.11.25325.0 sürümü güncellendi
7 Nisan 2017 - 2017'nin 14.10 sürümü güncellendi .25008.0, yeni Visual C ++ 2017 girişi olarak
24 Ekim 2016 - 14.0.24215.1 için 2015'in sürüm bilgisi
güncellendi - 14.0.24212 için 2015'in sürüm bilgisi
güncellendi 27 Mayıs 2016 - MSVC2015 Güncellemesi 2 için güncellendi
Bunlardan herhangi biri güncelliğini yitirirse lütfen benimle buradan iletişime geçin.
[HKEY_CLASSES_ROOT\Installer\Dependencies\,,x86,14.0,bundle\Dependents\{$GUID}
ve[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]
Deneyin
HKLM\SOFTWARE\Microsoft\DevDiv\VC\Servicing\11.0
başlangıç noktası olarak. Bunu, VC ++ 11 (VS 2012) çalışma zamanını yüklemek için bir kontrol olarak kullanacağım.
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\DevDiv\VC\Servicing\11.0\RuntimeMinimum
Installed
Değerin 1
bu kayıt defteri konumunda olup olmadığını kontrol edebilirsiniz : HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\11.0\VC\Runtimes\x86
64 bit sistemlerde. Kayıt defteri anahtarına erişime neden olacak kodda HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\11.0\VC\Runtimes\x86
. Yokluğuna dikkat edin Wow6432Node
.
32 bitlik bir sistemde kayıt defteri aşağıdakiler olmadan aynıdır Wow6432Node
:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\11.0\VC\Runtimes\x86
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\11.0\VC
ama Runtimes
anahtar bende değil . Dave'in cevabında anahtar bende var HKLM\SOFTWARE\Microsoft\DevDiv\VC\Servicing\11.0
.
Visual C ++ ile birlikte gönderilen önyükleyici paketi bildiriminde yükleme denetimi öğesi yoktur. Bir önkoşul olarak ayarlarsanız, Microsoft her zaman kurmak ister.
Elbette, VC redist paketinin MSI aracılığıyla kurulup kurulmadığını kontrol etmek için MsiQueryProductState'i yine de arayabilirsiniz, Paket kodu şu şekilde bulunabilir:
wmic product get
komut satırında veya zaten wmic: root \ cli adresindeyseniz, çalıştırın
product where "Caption like '%C++ 2012%'"
Bu basit soruların cevabı maalesef basit değil, tüm sistemlerin% 100'ünde çalışıyor ve hatta çok sayıda .net çerçevesine genişletilebilir.
Karmaşıklık, birçok VC çalışma zamanı revizyonunun mevcut olmasından (ve yapıldığından) kaynaklanmaktadır; bu durum, VC10 çalışma zamanlarının kurulu olmasına rağmen, yapı numaralarının yeterince yakın olmamasına ve bu nedenle, EXE'nizin, siz çok Tam olarak ihtiyaç duyduğunuz çalışma zamanları veya bu ve önceki sürümlerin aynı ana sürümün onunla çalışmasını sağlayan daha yeni çalışma zamanlarından biri (yan yana cehennem). Ayrıca, bir 64 bit EXE'niz varsa, her ikisini de, 32 VE 64 bit çalışma zamanlarını kontrol etmeniz gerekecektir.
Bununla birlikte, EXE'niz için çalışma zamanlarının yüklü olup olmadığını belirlemenin tek güvenilir yolu, EXE dosyasını çalıştırmayı denemektir. veya tek amacı yapmaktır aynı ana EXE olarak ayarlar ve ile inşa edilen bir başka EXE - - hiçbir şey. Sadece çalıştırın (bu, çalıştırma zamanlarının kurulu olduğu anlamına gelir) veya çalıştırılamaz (kurulmadığında).
VC10 32 ve 64 bit çalışma zamanlarının yüklü olmasını gerektiren bir yükleyici için aşağıdakileri yaptım: Yükleyici tüm sahte EXE'leri başlatmaya çalışır ve başarılı olursa, ilgili çalışma zamanının yüklü olduğu kabul edilir. Bu aynı zamanda 32/64 bit senaryosunu da çözer.
Bu arada, indirilebilir yerleşik .net 3.5 desteği de .net sürüm 3.0 ve 2.0'ı desteklediğinden, Windows 8 ve 10'da çok zor olan uygun .net çerçevesinin yüklü olup olmadığını belirlemek için de çalışır. bunlar için kayıt defteri girdisi yoktur. (Ve daha da kötüsü, hatta burada standart çerçeve montajcılar kullanamaz, sen gerekir yerleşik destek ve Windows üzerinden indirmek veya .net 4 ile uygulamanızı yeniden, ama bu başka bir hikaye kullanın).
C ++ kukla EXE, aşağıdaki koda sahip bir proje kullanılarak (ve gerekirse 64 bit yapılandırmada başka bir tane) oluşturulabilir:
int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}
MFC'yi paylaşılan bir DLL'de kullanmak için projenin özelliklerini ayarlamayı unutmayın. . Yürütülebilir dosyalar yaklaşık 4KB boyutunda olacak - kesin bir sonuç için ödenmesi gereken küçük bir bedel.
Kullanıcılarınıza güzel bir kurulum deneyimi sunmak için aşağıdakileri yapabilirsiniz (örnek kod NSIS içindir ):
Function TryLaunchApplication
Pop $1 ; pathname
nsExec::Exec $1
Pop $0
${If} $0 == "error"
${OrIf} $0 != 0
Push 0
${Else}
Push 1
${EndIf}
FunctionEnd
ve bir işlevde çağırın, örneğin 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
Ardından, örneğin Karşılama sayfasından çıkarken çalışma zamanı kontrolünü başlatın ve sonucu önbelleğe alın, böylece kullanıcı "Geri" ve "İleri" düğmesini her tıkladığında yeniden kontrol etmeniz gerekmez.
Ardından, kurulum ağacında salt okunur bir bölüm oluşturun ve Bileşenler sayfası gösterilmeden önce çalıştırılan bir işlevde bunu önceden seçin veya seçimini kaldırın .
Bu, her eksik çalışma zamanı bileşeninin kurulumunun zorunlu olduğundan emin olmanızı sağlar ve zaten mevcutsa atlanır.
Visual Studio 2010 ve sonraki sürümler WinSxS'i kullanmayı bıraktığından, yalnızca% windir% \ system32 \ msvcr110.dll dosyasını kontrol etmeniz yeterli olabilir. Yeterince yeni bir sürüme sahip olduğunuzu doğrulamak istiyorsanız, dosya sürümünün 11.0.50727.1 (VS2012 RTM) veya 11.0.51106.1 (VS2012 Güncelleme 1) olup olmadığını kontrol edebilirsiniz.
11.0.61030.0
) ile birlikte gelen ikili dosyaların 11.0.60610.1
ATL ve MFC ikili dosyaları için sürümüne sahip olduğunu ve11.0.51106.1
her şey için (ör. Msvcp110.dll ve msvcr110.dll) sürümüne sahip olduğunu unutmayın. Emin değilim neden. Sen giderek (I test ettik Windows 10 makinelerde) bu teyit edebilir C:\ProgramData\Package Cache\{BD95A8CD-1D9F-35AD-981A-3E7925026EBB}v11.0.61030\packages\vcRuntimeMinimum_x86
ve C:\ProgramData\Package Cache\{B175520C-86A2-35A7-8619-86DC379688B9}v11.0.61030\packages\vcRuntimeAdditional_x86
daha sonra .cab dosyaları dosyaları kontrol ediyor.
WiX tarafından oluşturulan bir MSI yükleyicisinin parçası olarak Visual C ++ yeniden dağıtılabilirliğini kontrol etme bağlamında bir cevap arayan bu soruya rastladım.
GUID'in sürüm ve işletim sistemiyle nasıl değiştiğini beğenmedim, bu yüzden Visual C ++ yeniden dağıtılabilir olup olmadığını kontrol etmek için C # ile yazılmış özel bir eylem oluşturdum.
Aşağıdaki her şey özellikle Visual C ++ 2015 Yeniden Dağıtılabilir (x64) içindir, ancak herhangi bir sürüm için kolayca değiştirilebilir.
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;
}
}
}
Sonra wxs dosyasında
<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>
Düzenle Bu yanıtı, özel bir eylem oluşturma ve kullanma hakkında bazı temel bilgilerle güncelliyorum.
WiX Toolset Visual Studio 2017 uzantısı yüklüyken Visual Studio 2017'de özel eylem oluşturmak için, proje şablonunu özel bir eylem oluşturmak için kullandım (WiX v3 için C # Özel Eylem Projesi).
Oluşturulan projeyi kontrol ettim ve bu makalenin başında listelenen değişikliklere sahip görünüyordu: https://www.codeproject.com/Articles/132918/Creating-Custom-Action-for-WIX-Written-in-Managed bu yüzden o makaleyi bölümden aldımAdding Custom Action to the Installer
ve bazı ince ayarlarla onu takip ettim.
Yaptığım bir diğer şey de projenin oluşturduğu .NET çerçevesinin sürümünü 3.5'e değiştirmekti.
Gerçekten yararlı bulmadım, ancak http://wixtoolset.org/documentation/manual/v3/wixdev/extensions/authoring_custom_actions.html adresini de görebilirsiniz.
Benim için bu konum çalıştı: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ DevDiv \ vc \ Servicing \ 11.0 \ RuntimeMinimum \ Version
Paketi yükledikten sonra hangi sürüme sahip olduğunuzu kontrol edin ve bunu yükleyicinizde bir koşul olarak kullanın. (benimki VCred'i kurduktan sonra 11.0.50727 olarak ayarlandı).
Denetim Masası> Programlar ve Özellikler'e gidin ve hepsi burada listelenir.
Uzman değilim ve bu cevap, insanların cevapladıklarıyla karşılaştırıldığında oldukça basit (kayıt defterini kontrol ediyor), bu yüzden doğru cevap olup olmadığından emin değilim ama benim için hile yaptı.
Bunu InnoSetup ile yapmayı başardım.
Kayıt defteri anahtarının varlığını kontrol ettim:
HKLM\SOFTWARE\Microsoft\VisualStudio\11.0\VC\Runtimes
Kaldırılırsa, mevcut değildir. Yüklenmişse, var.
Bu arada, Wow6432Node'da da olabilir:
HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\11.0\VC\Runtimes
Ürünün yükleme durumunu MsiQueryProductState aracılığıyla kontrol etmek, doğrudan kayıt defterini kontrol etmekle hemen hemen aynıdır , ancak yine de ProductCode için GUID'ye ihtiyacınız vardır .
Başka bir yerde belirtildiği gibi, bu yaklaşımların bir dezavantajı, her güncellemenin kendi ÜrünKoduna sahip olmasıdır!
Neyse ki MSI, bir ürün 'ailesini' tanımlayan bir Yükseltme Kodu sağlar . Bu bilgiyi çıkarmak için MSI'lardan birini açmak için orca'yı kullanabilirsiniz. Örneğin, VS2015'in yeniden dağıtılabilir için Yükseltme Kodu{65E5BD06-6392-3027-8C26-853107D3CF1A}
Söz konusu Yükseltme Kodu için tüm Ürün Kimliklerini almak için MsiEnumRelatedProducts'ı kullanabilirsiniz. Uygulamada, her yeniden güncelleme güncellemesi bir {B5FC62F5-A367-37A5-9FD2-A6E137C0096F}
öncekinin yerini aldığı için, bu yalnızca bir Ürün Kodu verir - VS2015 Güncellemesi 2 x86 için olduğu gibi .
Ne olursa olsun, daha sonra MsiGetProductInfo (productCode, INSTALLPROPERTY_VERSIONSTRING, ...) veya benzer işlevler aracılığıyla sürümü kontrol ederek istediğiniz sürümle karşılaştırabilirsiniz, örneğin eşdeğer veya sonraki bir sürümü kontrol etmek için.
Not C ++ uygulaması içinde, ayrıca kullanabileceği _VC_CRT_MAJOR_VERSION
, _VC_CRT_MINOR_VERSION
, _VC_CRT_BUILD_VERSION
eğer #include <crtversion.h>
- Eğer ikili ile inşa edildiğini hesapla CRT sürümünü belirlemek bu şekilde.
Bu PowerShell kodu hile yapmalı
Get-ItemProperty
HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* |
Select-Object DisplayName, DisplayVersion, Publisher, InstallDate |
Format-Table –AutoSize
Aynı şeye ihtiyacım vardı ve AFAIK bu programlı olarak yapılamasa da benim için çalıştı.
Sadece Başlat -> Bir programı kaldır'a gittim ve bir sürüm numarası içeren yeniden dağıtılabilir VC ++ öğesini bulana kadar aşağı kaydırdım. Sürüm numarasını araştırırken, VS2012 SP1'e ait olduğunu söyledi.
Eski soru ama işte Visual Studio 2005'ten beri başarıyla kullandığımız yaklaşım. Ben de bunu Visual Studio 2012 Update 4 kullanarak test ettim (sonunda yazılımımızı 2010'dan 2012'ye güncellediğimiz için).
Visual C ++ Yeniden Dağıtılabilir paketleri, kaldırıcılarını pencerelere kaydettiğinden (bu nedenle Denetim Masası "Programlar ve Özellikler" listesinde görünür), kayıt defterinde kaldırıcı anahtarının Görünen Adını kontrol ederiz.
İşte ilgili NSIS kodu:
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:
Yükleyicimiz bir 32bit exe olduğundan, Windows kayıt defteri anahtarının yukarıdaki konum yerine sanallaştırılmış Wow6432Node'da olup olmadığını belirlemeyi ele alır, böylece yukarıdaki kod hem 64bit hem de 32bit Windows kurulumlarında her iki anahtarı da açıkça kontrol etmek zorunda kalmadan çalışır.
Ayrıca, yukarıdaki kodu VC ++ Redist'in farklı bir sürümüne güncellemek için, kayıt defteri anahtar yolundaki GUID'yi ve görünen adı ihtiyacınız olan şekilde değiştirmeniz yeterlidir.
Bu önerilen yöntem olmasa da, son 10 yılda XP / XP64'ten Windows 10'dan 2005, 2010, 2010sp1 ve şimdi 2012u4 için redistleri kullanarak her çeşit pencereyi çalıştıran 10.000'den fazla makinede çalıştı.
Çoğu kişinin kaçırdığı şey, /reg:32
Windows x64'te anahtarı kontrol etmek için gerekli olan şeydir.
Bu konuyla ilgili Microsoft Yardım makalesine bakın .
Burada, Visual Studio 2012 Güncelleştirme 4 için Visual C ++ Yeniden Dağıtılabilir'in nasıl doğru şekilde kontrol edileceğini gösteren bir komut dosyası verilmiştir.
@ECHO OFF
:Author
REM "CREATED BY WAR59312"
REM "FEB 7th 2017"
REM Clear Screen
CLS
TITLE Detect Visual C++ 2012 Redistributables
REM This Batch Script Detects If Visual C++ Redistributable for Visual Studio 2012 Update 4 Is Installed
:DetectWindowsOS
REM Are We Running On x86 Or x64
IF NOT DEFINED PROCESSOR_ARCHITEW6432 (
IF %PROCESSOR_ARCHITECTURE% EQU x86 (
REM Windows Is x86
GoTo Check32Bit
) ELSE (
REM Windows Is x64
SET NeededFor64BitOnly=/reg:32
GoTo Check64Bit
)) ELSE (
REM Windows Is Unknown But Assume x64 To Be Safe
SET NeededFor64BitOnly=/reg:32
GoTo Check64Bit
)
:Check64Bit
REM Checks If Visual C++ 64Bit Redistributable for Visual Studio 2012 Update 4 Is Installed
REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\11.0\VC\Runtimes\x64" /v "Version" %NeededFor64BitOnly% 2>NUL^ | (
FIND "v11.0.61030.00" >NUL
) && (
ECHO.
ECHO 64bit Visual C++ Redistributable for Visual Studio 2012 Update 4 Is Installed
ECHO.
GoTo Check32Bit
) || (
ECHO.
ECHO 64bit Visual C++ Redistributable for Visual Studio 2012 Update 4 Is NOT Installed
ECHO.
GoTo Check32Bit
)
:Check32Bit
REM Checks If Visual C++ 32Bit Redistributable for Visual Studio 2012 Update 4 Is Installed
REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\11.0\VC\Runtimes\x86" /v "Version" %NeededFor64BitOnly% 2>NUL^ | (
FIND "v11.0.61030.00" >NUL
) && (
ECHO.
ECHO 32bit Visual C++ Redistributable for Visual Studio 2012 Update 4 Is Installed
) || (
ECHO.
ECHO 32bit Visual C++ Redistributable for Visual Studio 2012 Update 4 Is NOT Installed
)
:END
ECHO.
PAUSE
EXIT
Powershell komut dosyası çözümü:
@KayleeFrye_onDeck yanıtındaki bilgilere göre
Kullanıcının belirttiği sürümleri kontrol eden ve yükleyen bir powershell betiği oluşturdum, onunla kapsamlı testler yapmadım, ancak kendi CI (Sürekli Entegrasyon) senaryom için mükemmel çalışıyor.
Tam komut dosyası ve github'daki bilgiler
Kullandığım yaklaşım, burada sağlanan bilgilere göre regkey'leri kontrol etmeye dayanıyordu. Aşağıdaki komut dosyasının ne yaptığının özüdür:
function Test-RegistryValue {
param (
[parameter(Mandatory=$true)]
[ValidateNotNullOrEmpty()]$Path,
[parameter(Mandatory=$true)]
[ValidateNotNullOrEmpty()]$Value
)
try {
Get-ItemProperty -Path "$($Path+$Value)" -ErrorAction Stop | Out-Null
return $true
}
catch {
return $false
}
}
$redistInfo
KayleeFrye_onDeck'in bilgilerinden derlenen bilgileri içeren kontrol / indirme / sessiz kurulum .
$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
}
Tam komut dosyası ve daha fazla bilgi şurada bulunabilir: github'da
Herkes katkıda bulunabilir, eğer zamanım olursa komut dosyası üzerinde daha kapsamlı testler yapacağım ve buraya bilgi eklendikçe yeni paketler eklemeye devam edeceğim.
VC 2012 için tüm kayıt defteri değerlerini almak zor, bu yüzden tüm bağımlılıkları geçecek ve belirtilen sürüme uyacak küçük bir işlev yazdım.
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;
}
Bağımlılıklar:
using System.Text.RegularExpressions;
using Microsoft.Win32;
using System.Linq;
Kayıt defterinde arama yapabilirsiniz. vs2012 yok ama benim vs2010 var.
3 platform paketinin her biri için 3 farklı (ancak çok benzer) kayıt defteri anahtarı vardır. Her anahtarın 1 değerinde "Yüklendi" adlı bir DWORD değeri vardır.
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
Bunun için kayıt fonksiyonunu kullanabilirsiniz ......
HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\10.0\VC\VCRedist\...