¿Cómo detectar si Visual C ++ Redistributable para Visual Studio 2012 está instalado?
Probé Google y nadie ha hecho esta pregunta, ¡sorpresa!
visual-c++
sean717
fuente
fuente
Respuestas:
Depende de la versión que esté utilizando. Estas dos claves de 2012 me han funcionado bien 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 . Solo voy a seguir adelante y volcar todas estas versiones redist y las claves de registro que busco para detectar la instalación:
Visual C ++ 2005
URL de descarga directa: https://download.microsoft.com/download/8/B/4/8B42259F-5D70-43F4-AC2E-4B208FD8D66A/vcredist_x64.EXE
URL de descarga directa: https://download.microsoft.com/download/8/B/4/8B42259F-5D70-43F4-AC2E-4B208FD8D66A/vcredist_x86.EXE
Visual C ++ 2008
URL de descarga directa: https://download.microsoft.com/download/2/d/6/2d61c766-107b-409d-8fba-c39e61ca08e8/vcredist_x64.exe
URL de descarga directa: https://download.microsoft.com/download/d/d/9/dd9a82d0-52ef-40db-8dab-795376989c03/vcredist_x86.exe
Visual C ++ 2010
URL de descarga directa: https://download.microsoft.com/download/1/6/5/165255E7-1014-4D0A-B094-B6A430A6BFFC/vcredist_x64.exe
URL de descarga directa: https://download.microsoft.com/download/1/6/5/165255E7-1014-4D0A-B094-B6A430A6BFFC/vcredist_x86.exe
Visual C ++ 2012
URL de descarga directa: https://download.microsoft.com/download/1/6/B/16B06F60-3B20-4FF2-B699-5E9B7962F9AE/VSU_4/vcredist_x64.exe
URL de descarga directa: https://download.microsoft.com/download/1/6/B/16B06F60-3B20-4FF2-B699-5E9B7962F9AE/VSU_4/vcredist_x86.exe
advertencia sobre la versión : Segúnlos hallazgos delusuario Wai Ha Lee , "... los binarios que vienen con la actualización 4 (
11.0.61030.0
) de VC ++ 2012 tienen versión11.0.60610.1
para los binarios ATL y MFC, y11.0.51106.1
para todo lo demás, por ejemplo, msvcp110.dll y msvcr110.dll . .. "Visual C ++ 2013
URL de descarga directa: https://download.microsoft.com/download/2/E/6/2E61CFA4-993B-4DD4-91DA-3737CD5CD6E3/vcredist_x64.exe
URL de descarga directa: https://download.microsoft.com/download/2/E/6/2E61CFA4-993B-4DD4-91DA-3737CD5CD6E3/vcredist_x86.exe
Visual C ++ 2015
Considere usar el paquete 2015-2019 como alternativa
URL de descarga directa: https://download.microsoft.com/download/6/A/A/6AA4EDFF-645B-48C5-81CC-ED5963AEAD48/vc_redist.x64.exe
URL de descarga directa: https://download.microsoft.com/download/6/A/A/6AA4EDFF-645B-48C5-81CC-ED5963AEAD48/vc_redist.x86.exe
Visual C ++ 2017
Considere usar el paquete 2015-2019 como alternativa
Advertencia : se está utilizando una nueva convención de registro de 2017 o aún no se ha finalizado. Como supongo, las teclas más altas 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 list la clave que termina con un GUID.
URL de descarga directa: https://download.visualstudio.microsoft.com/download/pr/9fbed7c7-7012-4cc0-a0a3-a541f51981b5/e7eec15278b4473e26d7e32cef53a34c/vc_redist.x64.exe
URL de descarga directa: https://download.visualstudio.microsoft.com/download/pr/d0b808a8-aa78-4250-8e54-49b8c23f7328/9c5e6532055786367ee61aafb3313c95/vc_redist.x86.exe
Visual C ++ 2019 ( paquete 2015-2019 )
Consideración : se está utilizando otra nueva convención de registro para Visual C ++ 2019. Tampoco parece haber un instalador independiente para Visual C ++ 2019, solo este instalador de paquete que es Visual C ++ 2015 a 2019.
14.21.27702
URL de descarga directa: https://download.visualstudio.microsoft.com/download/pr/9e04d214-5a9d-4515-9960-3d71398d98c3/1e1e62ab57bbb4bf5199e8ce88f040be/vc_redist.x64.exe
URL de descarga directa: https://download.visualstudio.microsoft.com/download/pr/c8edbb87-c7ec-4500-a461-71e8912d25e9/99ba493d660597490cbb8b3211d2cae4/vc_redist.x86.exe
14.22.27821
URL de descarga directa: https://download.visualstudio.microsoft.com/download/pr/0c1cfec3-e028-4996-8bb7-0c751ba41e32/1abed1573f36075bfdfc538a2af00d37/vc_redist.x86.exe
URL de descarga directa: https://download.visualstudio.microsoft.com/download/pr/cc0046d4-e7b4-45a1-bd46-b1c079191224/9c4042a4c2e6d1f661f4c58cf4d129e9/vc_redist.x64.exe
Registro de cambios :
19 de agosto de 2019 - Se agregó una nueva versión de la versión del paquete 2015-2019
13 de junio de 2019 - Se agregó una nueva sección para la versión del paquete 2015-2019
14.21.27702
y se agregaron pequeñas notas a las secciones de 2015 y 2017 sobre la consideración del uso de el nuevo paquete como alternativa.14 de diciembre de 2018 - MSVC2008 actualizado para la
9.0.30729.6161
actualización del Service Pack 1 según los hallazgos de Jim Wolff27 de noviembre de 2018 - Información actualizada para MSVC2017 v.
14.16
12 de septiembre de 2018 - Advertencia de versión agregada a la Actualización 4 de 2012 según los hallazgos de Wai Ha Lee
24 de agosto, 2018: versión de 2017 actualizada para 14.15.26706, las dependencias de Visual C ++ actualizadas empaquetadas con VS 2017 15.8.1
16 de mayo de 2018 - Versión de 2017 actualizada para 14.14.26405.0 como la nueva entrada de C ++ 2017
8 de septiembre de 2017 - Versión de 2017 actualizada para 14.11.25325.0 como la nueva entrada de Visual C ++ 2017
7 de abril de 2017 - Versión de 2017 actualizada de 14.10 .25008.0 como la nueva entrada de Visual C ++ 2017
24 de octubre de 2016 - Información de versión de 2015 actualizada para 14.0.24215.1
18 de agosto de 2016 - Información de versión de 2015 actualizada para 14.0.24212
27 de mayo de 2016 - Información actualizada de MSVC2015 Update 2
Por favor contácteme aquí si alguno de estos queda desactualizado.
fuente
[HKEY_CLASSES_ROOT\Installer\Dependencies\,,x86,14.0,bundle\Dependents\{$GUID}
y[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]
Tratar
como punto de partida. Usaré esto como verificación para instalar el tiempo de ejecución de VC ++ 11 (VS 2012).
fuente
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\DevDiv\VC\Servicing\11.0\RuntimeMinimum
Puede verificar que el
Installed
valor esté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 resultaría en el acceso a la clave de registroHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\11.0\VC\Runtimes\x86
. Note la ausencia deWow6432Node
.En un sistema de 32 bits, el registro es el mismo sin
Wow6432Node
:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\11.0\VC\Runtimes\x86
fuente
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\11.0\VC
pero no tengo laRuntimes
llave. Tengo la clave en la respuesta de DaveHKLM\SOFTWARE\Microsoft\DevDiv\VC\Servicing\11.0
.No hay ningún elemento installcheck en el manifiesto del paquete bootstrapper enviado con Visual C ++. Supongo que Microsoft quiere instalar siempre si lo establece como un requisito previo.
Por supuesto, aún puede llamar a MsiQueryProductState para verificar si el paquete VC redist está instalado a través de MSI. El código del paquete se puede encontrar ejecutando
en la línea de comandos, o si ya está en wmic: root \ cli, ejecute
fuente
Desafortunadamente, la respuesta a estas simples preguntas no es simple, sino que funciona en el 100% de todos los sistemas e incluso se puede ampliar a los numerosos marcos .net.
La complejidad proviene del hecho de que hay (y hubo) muchas revisiones de tiempos de ejecución de VC que podrían llevar al caso de que, aunque se instalaron tiempos de ejecución de VC10, su número de compilación no era lo suficientemente reciente, por lo que su EXE no se iniciaría a menos que instale el mismo 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 para que la misma versión principal se ejecute con él (el infierno de lado a lado). Además, si tiene un EXE de 64 bits, deberá verificar los tiempos de ejecución de 32 Y 64 bits.
Dicho esto, la única forma confiable de determinar si los tiempos de ejecución de su EXE están instalados es intentar ejecutar el EXE , u otro EXE creado con la misma configuración que su EXE principal y cuyo único propósito es no hacer nada. Simplemente ejecute (lo que significa que los tiempos de ejecución están instalados) o no se ejecuten (cuando no estén instalados).
Hice lo siguiente para un instalador que requería los tiempos de ejecución VC10 de 32 y 64 bits instalados: El instalador intenta ejecutar todos los EXE ficticios y, si tiene éxito, se considera que el tiempo de ejecución correspondiente está instalado. Esto también resuelve el escenario de 32/64 bits.
Esto, por cierto, también funciona para determinar si está instalado el marco .net adecuado, lo cual es muy complicado en Windows 8 y 10, ya que el soporte .net 3.5 incorporado descargable también es compatible con las versiones .net 3.0 y 2.0. no hay entradas de registro para estos. (Y lo que es peor, ni siquiera puede utilizar los instaladores de framework estándar 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 usando un proyecto con el siguiente código (y otro en una configuración de 64 bits si es necesario):
Recuerde establecer las propiedades del proyecto Uso de MFC para usar MFC en una DLL compartida . Los ejecutables tendrán un tamaño de alrededor de 4 KB, un pequeño precio a pagar por un resultado seguro.
Para brindarles a sus usuarios una experiencia de instalación agradable, puede hacer lo siguiente (el código de muestra es para NSIS ):
y llamarlo en una función, por ejemplo, CheckRuntimes
A continuación, inicie la verificación de tiempo de ejecución, por ejemplo, al salir de la página de bienvenida y almacene el resultado en caché, 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, cree una sección de solo lectura en el árbol de instalación y preseleccione o anule la selección en la función que se ejecuta antes de que se muestre la página Componentes .
Esto garantizará que la instalación de cada componente de tiempo de ejecución faltante sea obligatoria y se omita si ya está presente.
fuente
Dado que Visual Studio 2010 y versiones posteriores dejaron de usar WinSxS, puede ser suficiente con solo verificar% 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 Update 1).
fuente
11.0.61030.0
) de VC ++ 2012 tienen la versión11.0.60610.1
para los binarios ATL y MFC, y11.0.51106.1
para todo lo demás, por ejemplo, msvcp110.dll y msvcr110.dll. No estoy seguro de por qué. Puede confirmar esto (en las máquinas con Windows 10 en las que lo he probado) yendoC:\ProgramData\Package Cache\{BD95A8CD-1D9F-35AD-981A-3E7925026EBB}v11.0.61030\packages\vcRuntimeMinimum_x86
yC:\ProgramData\Package Cache\{B175520C-86A2-35A7-8619-86DC379688B9}v11.0.61030\packages\vcRuntimeAdditional_x86
luego inspeccionando los archivos en los archivos .cab.Me encontré con esta pregunta en busca de una respuesta en el contexto de la verificación del redistribuible de Visual C ++ como parte de un instalador de MSI creado por WiX.
No me gustó cómo cambia el GUID con la versión y el sistema operativo, así que terminé creando una acción personalizada escrita en C # para verificar el redistribuible de Visual C ++.
Todo lo que aparece a continuación es específicamente para Visual C ++ 2015 Redistributable (x64), pero se puede modificar fácilmente para cualquier versión.
Luego en el archivo wxs
Editar Estoy actualizando esta respuesta con información básica sobre cómo crear y usar una acción personalizada.
Para crear la acción personalizada en Visual Studio 2017 con la extensión WiX Toolset Visual Studio 2017 instalada, utilicé la plantilla de proyecto para crear una acción personalizada (Proyecto de acción personalizada de C # para WiX v3).
Revisé el proyecto generado y parecía que ya tenía los cambios enumerados al principio de este artículo: https://www.codeproject.com/Articles/132918/Creating-Custom-Action-for-WIX-Written-in-Managed así que recogí ese artículo en la sección
Adding Custom Action to the Installer
y lo seguí con algunos ajustes.Otra cosa que hice fue cambiar la versión del marco .NET contra el que se construyó el proyecto a 3.5.
No lo encontré realmente útil, pero también puedes ver http://wixtoolset.org/documentation/manual/v3/wixdev/extensions/authoring_custom_actions.html
fuente
Para mí, esta ubicación funcionó: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ DevDiv \ vc \ Servicing \ 11.0 \ RuntimeMinimum \ Version
Verifique qué versión tiene después de instalar el paquete y utilícela como condición en su instalador. (el mío está configurado en 11.0.50727 después de instalar VCred).
fuente
Simplemente vaya a Panel de control> Programas y características, y todos aparecerán enumerados 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 funcionó para mí.
fuente
fuente
He logrado hacer esto con InnoSetup.
Verifiqué 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
fuente
Verificar el estado de instalación del producto a través de MsiQueryProductState es prácticamente equivalente a verificar el registro directamente, pero aún necesita el GUID para ProductCode .
Como se mencionó en otra parte, un inconveniente de estos enfoques es que cada actualización tiene su propio ProductCode.
Afortunadamente, MSI proporciona un UpgradeCode que identifica una "familia" de productos. Puede usar orca para abrir uno de los MSI para extraer esta información. Por ejemplo, el UpgradeCode para el redistribuible de VS2015 es
{65E5BD06-6392-3027-8C26-853107D3CF1A}
Puede usar MsiEnumRelatedProducts para obtener todos los ID de producto para ese UpgradeCode. En la práctica, dado que cada actualización de nueva lista reemplaza a la anterior, esto solo producirá un código de producto, como
{B5FC62F5-A367-37A5-9FD2-A6E137C0096F}
para VS2015 Update 2 x86.Independientemente, puede verificar la versión a través de MsiGetProductInfo (productCode, INSTALLPROPERTY_VERSIONSTRING, ...) o funciones similares para comparar 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 se puede utilizar
_VC_CRT_MAJOR_VERSION
,_VC_CRT_MINOR_VERSION
,_VC_CRT_BUILD_VERSION
si#include <crtversion.h>
- de esta manera se puede determinar Calcular la versión CRT que su binario fue construido con.fuente
Este código de PowerShell debería funcionar
fuente
Necesitaba lo mismo, y aunque AFAIK, esto no se puede hacer programáticamente, funcionó para mí.
Simplemente fui a Inicio -> Desinstalar un programa y me desplacé hacia abajo hasta que encontré 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.
fuente
Pregunta antigua, pero aquí está el enfoque que hemos utilizado desde Visual Studio 2005 con éxito. También lo probé usando Visual Studio 2012 Update 4 (ya que finalmente estamos actualizando nuestro software de 2010 a 2012).
Dado que los paquetes redistribuibles de Visual C ++ registran su desinstalador con Windows (por lo que aparece en la lista "Programas y características" del Panel de control), simplemente buscamos el Nombre para mostrar de la clave del desinstalador en el registro.
Aquí está el código NSIS relevante:
Tenga en cuenta que dado que nuestro instalador es un exe de 32 bits, Windows se encarga de determinar si la clave de registro está realmente en el Wow6432Node virtualizado en lugar de en 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 durante los últimos 10 años ejecutando todas las versiones de Windows desde XP / XP64 hasta Windows 10 usando listas rojas para 2005, 2010, 2010sp1 y ahora 2012u4.
fuente
Verificaría el
Installed
valor deHKLM\SOFTWARE\[WOW6432Node]\Microsoft\Windows\CurrentVersion\Uninstall\{VCRedist_GUID}
llaveVC++ 2012 (x86)
es{33d1fd90-4274-48a1-9bc1-97e33d9c2d6f}
WOW6432Node
estará presente o no dependiendo delVC++ redist
productofuente
Lo que la mayoría de la gente pierde es lo necesario
/reg:32
para buscar la clave en Windows x64.Consulte el artículo de la Ayuda de Microsoft sobre este tema.
Aquí hay un script que demuestra cómo comprobar correctamente Visual C ++ Redistributable para Visual Studio 2012 Update 4.
fuente
La solución de script de powershell:
Basado en la información en la respuesta de @kayleeFrye_onDeck
He creado un script de PowerShell que verifica e instala las versiones que especifica el usuario, no he realizado pruebas exhaustivas con él, pero para mi propio escenario de CI (Integración continua) funciona perfectamente.
El guión completo e información sobre github
El enfoque que utilicé se basó en verificar las claves de registro según la información proporcionada aquí. Lo siguiente es la esencia de lo que hace el guión:
La verificación / descarga / instalación silenciosa basada en la
$redistInfo
que contiene la información compilada de kayleeFrye_onDeck's.El script completo y más información se pueden encontrar en github.
Cualquiera es bienvenido a contribuir, si tengo tiempo haré pruebas más extensas del script y seguiré intentando agregar nuevos paquetes a medida que se agregue información aquí.
fuente
Es difícil obtener todos los valores de registro para VC 2012, así que he escrito una pequeña función que revisará todas las dependencias y coincidirá con la versión especificada.
Dependencias:
fuente
se puede 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 ...
fuente
HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\10.0\VC\VCRedist\...