visual-c++ - studio - microsoft visual c++ 2015
Detectar si está instalado Visual C++ Redistributable para Visual Studio 2012 (18)
¿Cómo detectar si Visual C ++ Redistributable para Visual Studio 2012 está instalado?
Intenté Google y nadie ha hecho esta pregunta, ¡sorpresa!
Dado que Visual Studio 2010 y posterior dejó de usar WinSxS, puede ser suficiente con comprobar% windir% / system32 / msvcr110.dll. Si desea verificar que tiene una versión lo suficientemente nueva, puede verificar si la versión del archivo es 11.0.50727.1 (VS2012 RTM) o 11.0.51106.1 (VS2012 Actualización 1).
Depende de qué versión estés usando. Estas dos claves de 2012 me han funcionado con sus versiones correspondientes para descargar para la Actualización 4. Tenga en cuenta que algunas de estas ubicaciones de registro pueden depender del sistema operativo. Recopilé esta información de una caja de Windows 10 x64 . Voy a seguir adelante y eliminar todas estas versiones de rediseño y las claves de registro que busco para detectar la instalación .:
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 de descarga directa: 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 de descarga directa: 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)
Registry Key: HKLM/SOFTWARE/Classes/Installer/Products/67D6ECF5CD5FBA732B8B22BAC8DE1B4D
Configuration: x64
Version: 9.0.30729.5677
URL de descarga directa: https://download.microsoft.com/download/5/D/8/5D8C65CB-C849-4025-8E95-C3966CAFD8AE/vcredist_x64.exe
Microsoft Visual C++ 2008 Redistributable (x86)
Registry Key: HKLM/SOFTWARE/Classes/Installer/Products/6E815EB96CCE9A53884E7857C57002F0
Configuration: x86
Version: 9.0.30729.5677
URL de descarga directa: https://download.microsoft.com/download/5/D/8/5D8C65CB-C849-4025-8E95-C3966CAFD8AE/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 de descarga directa: 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 de descarga directa: 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 de descarga directa: 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 de descarga directa: https://download.microsoft.com/download/1/6/B/16B06F60-3B20-4FF2-B699-5E9B7962F9AE/VSU_4/vcredist_x86.exe
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 de descarga directa: 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 de descarga directa: https://download.microsoft.com/download/2/E/6/2E61CFA4-993B-4DD4-91DA-3737CD5CD6E3/vcredist_x86.exe
Visual C ++ 2015
Microsoft Visual C++ 2015 Redistributable (x64) - 14.0.24215
Registry Key: HKEY_LOCAL_MACHINE/SOFTWARE/Classes/Installer/Dependencies/{d992c12e-cab2-426f-bde3-fb8c53950b0d}
Configuration: x64
Version: 14.0.24215.1
URL de descarga directa: 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: HKEY_LOCAL_MACHINE/SOFTWARE/Classes/Installer/Dependencies/{e2803110-78b3-4664-a479-3611a381656a}
Configuration: x86
Version: 14.0.24215.1
URL de descarga directa: https://download.microsoft.com/download/6/A/A/6AA4EDFF-645B-48C5-81CC-ED5963AEAD48/vc_redist.x86.exe
Visual C ++ 2017
Advertencia : ya sea que se use una nueva convención de registro 2017, o aún no se ha finalizado. Como supongo que las teclas de la parte superior de: [HKEY_CLASSES_ROOT/Installer/Dependencies/,,amd64,14.0,bundle]
y [HKEY_CLASSES_ROOT/Installer/Dependencies/,,x86,14.0,bundle]
están sujetos a cambios, o al menos tienen diferentes GUID anidados, voy a usar la lista de la clave que termina con un GUID.
Microsoft Visual C++ 2017 Redistributable (x64) - 14.14.26405
Registry Key: [HKEY_CLASSES_ROOT/Installer/Dependencies/,,amd64,14.0,bundle/Dependents/{5b295ba9-ef89-4aeb-8acc-b61adb0b9b5f}]
Configuration: x64
Version: 14.14.26405.0
URL de descarga directa: https://download.visualstudio.microsoft.com/download/pr/12192820/2cd2dba5748dc95950a5c42c2d2d78e4/VC_redist.x64.exe
Microsoft Visual C++ 2017 Redistributable (x86) - 14.14.26405
Registry Key: [HKEY_CLASSES_ROOT/Installer/Dependencies/,,x86,14.0,bundle/Dependents/{ec9c2282-a836-48a6-9e41-c2f0bf8d678b}]
Configuration: x86
Version: 14.14.26405.0
URL de descarga directa: https://download.visualstudio.microsoft.com/download/pr/12192785/88b50ce70017bf10f2d56d60fcba6ab1/VC_redist.x86.exe
Registro de cambios :
16 de mayo de 2018: versión actualizada de 2017 para 14.14.26405.0 como la nueva entrada de C ++ 2017
8 de septiembre de 2017: versión actualizada de 2017 para 14.11.25325.0 como la nueva entrada de Visual C ++ 2017
7 de abril de 2017: se actualizó la versión 2017 de 14.10.25008.0 como la nueva entrada de Visual C ++ 2017
24 de octubre de 2016: se actualizó la información de la versión de 2015 para 14.0.24215.1
18 de agosto de 2016 - Actualización de la información de la versión de 2015 para 14.0.24212
27 de mayo de 2016 - Información actualizada para la actualización 2 de MSVC2015
Por favor contáctame aquí si alguno de estos se vuelve obsoleto.
Este código de PowerShell debería hacer el truco
Get-ItemProperty
HKLM:/Software/Microsoft/Windows/CurrentVersion/Uninstall/* |
Select-Object DisplayName, DisplayVersion, Publisher, InstallDate |
Format-Table –AutoSize
He tenido éxito haciendo esto con InnoSetup.
Comprobé la existencia de la clave de registro:
HKLM/SOFTWARE/Microsoft/VisualStudio/11.0/VC/Runtimes
Si se desinstala, no existe. Si está instalado, existe.
Por cierto, también podría estar en el Wow6432Node:
HKLM/SOFTWARE/Wow6432Node/Microsoft/VisualStudio/11.0/VC/Runtimes
La respuesta a estas simples preguntas lamentablemente no es simple, pero funciona en el 100% de todos los sistemas, e incluso se puede ampliar a los numerosos .NET frameworks.
La complejidad proviene del hecho de que hay (y hubo) muchas revisiones de tiempos de ejecución de VC que podrían conducir al caso de que aunque los tiempos de ejecución de VC10 se instalaron, su número de compilación no era lo suficientemente reciente para que su EXE no se iniciara a menos que tiempos de ejecución exactos que requirió o uno de los tiempos de ejecución más nuevos que permiten que esta y versiones anteriores se ejecuten con la misma versión principal (el infierno lado a lado). Además, si tiene un EXE de 64 bit, tendrá que verificar ambos, los tiempos de ejecución de 32 Y 64 bit.
Dicho esto, la única forma confiable de determinar si los tiempos de ejecución para su EXE están instalados es intentar ejecutar el EXE - u otro EXE que está construido con la misma configuración que su EXE principal y cuyo único propósito es hacer - nada. Simplemente ejecute (lo que significa que los tiempos de ejecución están instalados) o deje de funcionar (cuando no esté instalado).
Hice lo siguiente para un instalador que requería los tiempos de ejecución de VC10 de 32 y 64 bits: el instalador intenta ejecutar todos los EXE ficticios y, si tiene éxito, se considera que está instalado el tiempo de ejecución correspondiente. Esto también resuelve el escenario de 32/64 bits.
Esto, dicho sea de paso, también funciona para determinar si se instala el .NET Framework adecuado, lo cual es muy complicado en Windows 8 y 10, ya que el soporte descargable incorporado de .net 3.5 también admite las versiones de .NET 3.0 y 2.0. no hay entradas de registro para estos. (Y lo que es peor, ni siquiera puede usar los instaladores estándar de Framework aquí, debe usar el soporte integrado y descargarlo a través de Windows, o reconstruir su aplicación con .net 4, pero esa es otra historia).
El EXE ficticio de C ++ se puede construir utilizando un proyecto con el siguiente código (y otro en una configuración de 64 bits si es necesario):
int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}
Recuerde establecer las propiedades del proyecto. Uso de MFC para usar MFC en una DLL compartida . Los archivos ejecutables tendrán un tamaño de 4 KB, un pequeño precio a pagar para un resultado seguro.
Para ofrecer a sus usuarios una experiencia de instalación agradable, puede hacer lo siguiente (el código de muestra es para NSIS ):
Function TryLaunchApplication
Pop $1 ; pathname
nsExec::Exec $1
Pop $0
${If} $0 == "error"
${OrIf} $0 != 0
Push 0
${Else}
Push 1
${EndIf}
FunctionEnd
y llamarlo en una función, p. ej. 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
A continuación, inicie la comprobación del tiempo de ejecución, por ejemplo, al salir de la página de Bienvenida y guarde en caché el resultado, para que no tenga que volver a verificar cada vez que el usuario haga clic en el botón "Atrás" y "Siguiente".
A continuación, haga una sección de solo lectura en el árbol de instalación y preseleccione o anule la selección en la función a que se ejecuta antes de que se muestre la página Componentes .
Esto asegurará que la instalación de cada componente de tiempo de ejecución faltante sea obligatoria, y se omite si ya está presente.
Lo que la mayoría de las personas extrañan es el requerido /reg:32
para verificar la clave en Windows x64.
Ver el artículo de Ayuda de Microsoft sobre este tema.
Aquí hay una secuencia de comandos que muestra cómo verificar correctamente Visual C ++ Redistributable para 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
Me encontré con esta pregunta en busca de una respuesta en el contexto de la comprobación de la redistribución de Visual C ++ como parte de un instalador de MSI creado por WiX.
No me gustó cómo cambian los GUID con la versión y el sistema operativo, así que terminé creando una acción personalizada escrita en C # para verificar la redistribución de Visual C ++.
Todo a continuación es específicamente para Visual C ++ 2015 Redistributable (x64), pero se puede modificar fácilmente para cualquier versión.
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;
}
}
}
Luego en el archivo 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>
Necesitaba lo mismo, y aunque AFAIK no se puede hacer mediante programación, funcionó para mí.
Acabo de ir a Inicio -> Desinstalar un programa, y me desplacé hacia abajo hasta encontrar el VC ++ redistribuible, que incluye un número de versión. Buscando en Google el número de versión, me dijo que pertenece a VS2012 SP1.
No hay ningún elemento installcheck en el manifiesto del paquete bootstrapper incluido con Visual C ++. Supongo que Microsoft quiere instalar siempre si lo establece como un requisito previo.
Por supuesto, puede llamar a MsiQueryProductState para verificar si el paquete de redirección de VC está instalado a través de MSI. El código del paquete se puede encontrar ejecutando
wmic product get
en la línea de comandos, o si ya estás en wmic: root / cli, ejecuta
product where "Caption like ''%C++ 2012%''"
Para mí, esta ubicación funcionó: HKEY_LOCAL_MACHINE / SOFTWARE / Microsoft / DevDiv / vc / Servicing / 11.0 / RuntimeMinimum / Version
Compruebe qué versión tiene después de haber instalado el paquete y utilícelo como condición en su instalador. (el mío se establece en 11.0.50727 después de instalar VCred).
Puede verificar que el valor Installed
sea 1
en esta ubicación de registro: HKEY_LOCAL_MACHINE/SOFTWARE/Wow6432Node/Microsoft/VisualStudio/11.0/VC/Runtimes/x86
en sistemas de 64 bits. En código que daría como resultado el acceso a la clave de registro HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/VisualStudio/11.0/VC/Runtimes/x86
. Observe la ausencia de Wow6432Node
.
En un sistema de 32 bits, el registro es el mismo sin Wow6432Node
: HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/VisualStudio/11.0/VC/Runtimes/x86
Simplemente vaya a Panel de control> Programas y características, y todos aparecerán allí.
No soy un experto y esta respuesta es bastante simple en comparación con lo que la gente está respondiendo (verificando el registro), así que no estoy seguro de si es la respuesta correcta, pero me sirvió de algo.
Tratar
HKLM/SOFTWARE/Microsoft/DevDiv/VC/Servicing/11.0
como punto de partida Utilizaré esto como un control para instalar el tiempo de ejecución de VC ++ 11 (VS 2012).
Una vieja pregunta, pero este es el enfoque que hemos utilizado desde Visual Studio 2005 con éxito. Acabo de probarlo usando Visual Studio 2012 Update 4 también (ya que finalmente estamos actualizando nuestro software de 2010 a 2012).
Dado que los paquetes Redistribuibles de Visual C ++ registran su desinstalador con Windows (para que aparezca en la lista "Programas y características" del Panel de control), simplemente verificamos el Nombre para mostrar de la clave de desinstalación en el registro.
Aquí está el código relevante de NSIS:
ReadRegStr $0 HKLM "SOFTWARE/Microsoft/Windows/CurrentVersion/Uninstall/{33d1fd90-4274-48a1-9bc1-97e33d9c2d6f}/" "DisplayName"
StrCmp $0 "Microsoft Visual C++ 2012 Redistributable (x86) - 11.0.61030" vs2012redistInstalled
DetailPrint "Microsoft Visual C++ 2012 Update 4 Redistributable not found!"
DetailPrint "Downloading from www.mywebsite.com"
; insert applicable download code here
ExecWait ''"<downloaded redist exe>" /promptrestart /passive''
vs2012redistInstalled:
Tenga en cuenta que dado que nuestro instalador es un exe de 32 bits, Windows maneja determinar si la clave de registro está realmente en el Wow6432Node virtualizado en lugar de la ubicación anterior, por lo que el código anterior funciona en instalaciones de Windows de 64 y 32 bits sin tener que verificar ambas claves explícitamente.
También tenga en cuenta que para actualizar el código anterior a una versión diferente de VC ++ Redist, simplemente cambie el GUID en la ruta de la clave de registro y el nombre para mostrar a lo que necesite.
Si bien este puede no ser el método recomendado, ha funcionado en más de 10,000 máquinas en los últimos 10 años ejecutando cada sabor de Windows desde XP / XP64 hasta Windows 10 usando redistribuciones para 2005, 2010, 2010sp1 y ahora 2012u4.
Verificar el estado de instalación del producto a través de MsiQueryProductState es más o menos equivalente a verificar el registro directamente, pero aún necesita el GUID para el ProductCode .
Como se mencionó en otra parte, una desventaja de estos enfoques es que cada actualización tiene su propio Código de producto.
Afortunadamente, MSI proporciona un UpgradeCode que identifica una ''familia'' de productos. Puede usar orca para abrir uno de los MSIs para extraer esta información. Por ejemplo, UpgradeCode for VS2015''s redistributable es {65E5BD06-6392-3027-8C26-853107D3CF1A}
Puede usar MsiEnumRelatedProducts para obtener todos los ID de productos para ese UpgradeCode. En la práctica, dado que cada actualización de rediseño reemplaza a la anterior, esto solo arrojará un Código de producto, como {B5FC62F5-A367-37A5-9FD2-A6E137C0096F}
para VS2015 Actualización 2 x86.
De todos modos, puede verificar la versión a través de MsiGetProductInfo (productCode, INSTALLPROPERTY_VERSIONSTRING, ...) o funciones similares para compararlas con la versión que desea, por ejemplo, para buscar una versión equivalente o posterior.
Tenga en cuenta que dentro de una aplicación C ++, también puede usar _VC_CRT_MAJOR_VERSION
, _VC_CRT_MINOR_VERSION
, _VC_CRT_BUILD_VERSION
si #include <crtversion.h>
- de esta manera puede determinar el cálculo de la versión CRT con la que se creó su binario.
Verificaría el valor Installed
de
HKLM/SOFTWARE/[WOW6432Node]/Microsoft/Windows/CurrentVersion/Uninstall/{VCRedist_GUID}
- donde el GUID de
VC++ 2012 (x86)
es{33d1fd90-4274-48a1-9bc1-97e33d9c2d6f}
-
WOW6432Node
estará presente o no según el producto deVC++ redist
puedes buscar en el registro. En realidad no tengo vs2012 pero tengo vs2010.
Hay 3 claves de registro diferentes (pero muy similares) para cada uno de los 3 paquetes de plataforma. Cada clave tiene un valor DWORD llamado "Instalado" con un valor de 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
Puede usar la función de registro para eso ......
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