Como detectar se o Visual C ++ Redistributable for Visual Studio 2012 está instalado?
Experimentei o Google e ninguém fez essa pergunta, surpresa!
visual-c++
sean717
fonte
fonte
Respostas:
Depende de qual versão você está usando. Essas duas chaves de 2012 funcionaram bem para mim com suas versões correspondentes para baixar para a atualização 4. Esteja ciente de que alguns desses locais de registro podem ser dependentes do sistema operacional. Eu coletei essas informações de uma caixa do Windows 10 x64 . Vou apenas prosseguir e descartar todas essas versões redist e as chaves de registro que procuro para detectar a instalação:
Visual C ++ 2005
URL de download direto: https://download.microsoft.com/download/8/B/4/8B42259F-5D70-43F4-AC2E-4B208FD8D66A/vcredist_x64.EXE
URL de download direto: https://download.microsoft.com/download/8/B/4/8B42259F-5D70-43F4-AC2E-4B208FD8D66A/vcredist_x86.EXE
Visual C ++ 2008
URL de download direto: https://download.microsoft.com/download/2/d/6/2d61c766-107b-409d-8fba-c39e61ca08e8/vcredist_x64.exe
URL de download direto: https://download.microsoft.com/download/d/d/9/dd9a82d0-52ef-40db-8dab-795376989c03/vcredist_x86.exe
Visual C ++ 2010
URL de download direto: https://download.microsoft.com/download/1/6/5/165255E7-1014-4D0A-B094-B6A430A6BFFC/vcredist_x64.exe
URL de download direto: https://download.microsoft.com/download/1/6/5/165255E7-1014-4D0A-B094-B6A430A6BFFC/vcredist_x86.exe
Visual C ++ 2012
URL de download direto: https://download.microsoft.com/download/1/6/B/16B06F60-3B20-4FF2-B699-5E9B7962F9AE/VSU_4/vcredist_x64.exe
URL de download direto: https://download.microsoft.com/download/1/6/B/16B06F60-3B20-4FF2-B699-5E9B7962F9AE/VSU_4/vcredist_x86.exe
advertência de versão : Por usuário Wai Ha Lee 's descobertas, "... os binários que vêm com VC ++ 2012 atualização 4 (
11.0.61030.0
) têm versão11.0.60610.1
para os binários ATL e MFC e11.0.51106.1
para todo o resto, por exemplo, msvcp110.dll e msvcr110.dll . .. "Visual C ++ 2013
URL de download direto: https://download.microsoft.com/download/2/E/6/2E61CFA4-993B-4DD4-91DA-3737CD5CD6E3/vcredist_x64.exe
URL de download direto: https://download.microsoft.com/download/2/E/6/2E61CFA4-993B-4DD4-91DA-3737CD5CD6E3/vcredist_x86.exe
Visual C ++ 2015
Considere usar o pacote 2015-2019 como uma alternativa
URL de download direto: https://download.microsoft.com/download/6/A/A/6AA4EDFF-645B-48C5-81CC-ED5963AEAD48/vc_redist.x64.exe
URL de download direto: https://download.microsoft.com/download/6/A/A/6AA4EDFF-645B-48C5-81CC-ED5963AEAD48/vc_redist.x86.exe
Visual C ++ 2017
Considere usar o pacote 2015-2019 como uma alternativa
Advertência : há uma nova convenção de registro de 2017 sendo usada ou ela ainda não foi finalizada. Como estou adivinhando as teclas superiores de:
[HKEY_CLASSES_ROOT\Installer\Dependencies\,,amd64,14.0,bundle]
e[HKEY_CLASSES_ROOT\Installer\Dependencies\,,x86,14.0,bundle]
estão sujeitos a alterações ou, pelo menos, têm GUIDs aninhados diferentes, vou usar listar a chave que termina com um GUID.
URL de download direto: https://download.visualstudio.microsoft.com/download/pr/9fbed7c7-7012-4cc0-a0a3-a541f51981b5/e7eec15278b4473e26d7e32cef53a34c/vc_redist.x64.exe
URL de download direto: https://download.visualstudio.microsoft.com/download/pr/d0b808a8-aa78-4250-8e54-49b8c23f7328/9c5e6532055786367ee61aafb3313c95/vc_redist.x86.exe
Visual C ++ 2019 ( pacote 2015-2019 )
Advertência : há outra nova convenção de registro sendo usada para Visual C ++ 2019. Também não parece haver um instalador autônomo para Visual C ++ 2019, apenas este instalador de pacote que é Visual C ++ 2015 a 2019.
14,21,27702
URL de download direto: https://download.visualstudio.microsoft.com/download/pr/9e04d214-5a9d-4515-9960-3d71398d98c3/1e1e62ab57bbb4bf5199e8ce88f040be/vc_redist.x64.exe
URL de download direto: https://download.visualstudio.microsoft.com/download/pr/c8edbb87-c7ec-4500-a461-71e8912d25e9/99ba493d660597490cbb8b3211d2cae4/vc_redist.x86.exe
14.22.27821
URL de download direto: https://download.visualstudio.microsoft.com/download/pr/0c1cfec3-e028-4996-8bb7-0c751ba41e32/1abed1573f36075bfdfc538a2af00d37/vc_redist.x86.exe
URL de download direto: https://download.visualstudio.microsoft.com/download/pr/cc0046d4-e7b4-45a1-bd46-b1c079191224/9c4042a4c2e6d1f661f4c58cf4d129e9/vc_redist.x64.exe
Registro de alterações :
19 de agosto de 2019 - Adicionada uma nova versão da versão do pacote 2015-2019
13 de junho de 2019 - Adicionada uma nova seção para a versão 2015-2019 do pacote
14.21.27702
e adicionadas pequenas notas às seções de 2015 e 2017 sobre como considerar o uso de o novo pacote como alternativa.14 de dezembro de 2018 - MSVC2008 atualizado para a
9.0.30729.6161
atualização do Service Pack 1 de acordo com as descobertas de Jim Wolff27 de novembro de 2018 - Informações atualizadas para MSVC2017 v.
14.16
12 de setembro de 2018 - Adicionada limitação de versão à Atualização 4 de 2012 de acordo com as descobertas de Wai Ha Lee
em 24 de agosto, 2018 - versão de 2017 atualizada para 14.15.26706, as dependências do Visual C ++ atualizadas empacotadas com o VS 2017 15.8.1
16 de maio de 2018 - versão de 2017 atualizada para 14.14.26405.0 como a nova entrada C ++ 2017
8 de setembro de 2017 - versão de 2017 atualizada para 14.11.25325.0 como a nova entrada do Visual C ++ 2017
7 de abril de 2017 - versão atualizada de 14.10.25008.0 de 2017 como a nova entrada do Visual C ++ 2017
24 de outubro de 2016 - informações da versão de 2015 atualizadas para 14.0.24215.1
18 de agosto de 2016 - Informações atualizadas da versão de 2015 para 14.0.24212
27 de maio de 2016 - Informações atualizadas para MSVC2015 Atualização 2
Entre em contato comigo aqui se algum deles ficar desatualizado.
fonte
[HKEY_CLASSES_ROOT\Installer\Dependencies\,,x86,14.0,bundle\Dependents\{$GUID}
e[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]
Experimentar
como ponto de partida. Vou usar isso como uma verificação para instalar o tempo de execução do VC ++ 11 (VS 2012).
fonte
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\DevDiv\VC\Servicing\11.0\RuntimeMinimum
Você pode verificar se o
Installed
valor está1
neste local de registro:HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\11.0\VC\Runtimes\x86
em sistemas de 64 bits. No código que resultaria no acesso à chave do registroHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\11.0\VC\Runtimes\x86
. Observe a ausência deWow6432Node
.Em um sistema de 32 bits, o registro é o mesmo sem
Wow6432Node
:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\11.0\VC\Runtimes\x86
fonte
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\11.0\VC
mas não tenho aRuntimes
chave. Eu tenho a chave da resposta de DaveHKLM\SOFTWARE\Microsoft\DevDiv\VC\Servicing\11.0
.Não há nenhum elemento installcheck no manifesto do pacote de bootstrapper fornecido com o Visual C ++. Acho que a Microsoft sempre deseja instalar se você configurá-lo como um pré-requisito.
Claro, você ainda pode chamar MsiQueryProductState para verificar se o pacote VC redist está instalado via MSI. O código do pacote pode ser encontrado executando
na linha de comando, ou se você já estiver em wmic: root \ cli, execute
fonte
A resposta a essas perguntas simples, infelizmente, não é simples, mas funciona em 100% de todos os sistemas e pode ser estendida até mesmo a vários frameworks .net.
A complexidade vem do fato de que há (e havia) muitas revisões de tempos de execução VC que poderiam levar ao caso de que, embora os tempos de execução VC10 tenham sido instalados, seu número de compilação não era recente o suficiente para que seu EXE não fosse iniciado a menos que você instalasse o tempos de execução exatos que você exigiu ou um dos tempos de execução mais recentes que permitem esta e as versões anteriores para a mesma versão principal rodar com ele (o inferno lado a lado). Além disso, se você tiver um EXE de 64 bits, terá que verificar os dois tempos de execução de 32 E 64 bits.
Dito isso, a única maneira confiável de determinar se os tempos de execução do EXE estão instalados é tentar executar o EXE - ou outro EXE que é construído com as mesmas configurações do EXE principal e cujo único propósito é - nada. Basta executar (o que significa que os tempos de execução estão instalados) ou falhar ao executar (quando não instalado).
Eu fiz o seguinte para um instalador que exigia os tempos de execução VC10 de 32 e 64 bits instalados: O instalador tenta iniciar todos os EXEs fictícios e, se tiver êxito, o tempo de execução correspondente é considerado instalado. Isso também resolve o cenário de 32/64 bits.
A propósito, isso também funciona para determinar se a estrutura .net adequada está instalada, o que é muito complicado no Windows 8 e 10, já que o suporte para .net 3.5 integrado para download também oferece suporte para as versões .net 3.0 e 2.0 - aí não há entradas de registro para eles. (E pior, você não pode nem mesmo usar os instaladores do framework padrão aqui, você deve usar o suporte integrado e baixá-lo via Windows, ou reconstruir seu aplicativo com .net 4, mas isso é outra história).
O EXE fictício C ++ pode ser construído usando um projeto com o seguinte código (e outro em uma configuração de 64 bits, se necessário):
Lembre-se de definir as propriedades do projeto Uso de MFC para usar MFC em uma DLL compartilhada . Os executáveis terão cerca de 4 KB - um pequeno preço a pagar por um resultado certo.
Para dar aos seus usuários uma boa experiência de instalação, você pode fazer o seguinte (o código de exemplo é para NSIS ):
e chamá-lo em uma função, por exemplo, CheckRuntimes
Em seguida, inicie a verificação de tempo de execução, por exemplo, ao sair da página de boas - vindas e armazene o resultado em cache, para que você não precise verificar novamente toda vez que o usuário clicar no botão "Voltar" e "Avançar".
Em seguida, crie uma seção somente leitura na árvore de instalação e pré-selecione ou desmarque-a em uma função que é executada antes que a página Componentes seja exibida.
Isso garantirá que a instalação de cada componente de tempo de execução ausente seja obrigatória e seja ignorada se já estiver presente.
fonte
Como o Visual Studio 2010 e posterior parou de usar WinSxS, pode ser o suficiente apenas verificar% windir% \ system32 \ msvcr110.dll. Se você deseja verificar se tem uma versão nova o suficiente, você pode verificar se a versão do arquivo é 11.0.50727.1 (VS2012 RTM) ou 11.0.51106.1 (VS2012 Atualização 1).
fonte
11.0.61030.0
) do VC ++ 2012 têm versão11.0.60610.1
para os binários ATL e MFC e11.0.51106.1
para todo o resto, por exemplo, msvcp110.dll e msvcr110.dll. Não sei por quê. Você pode confirmar isso (nas máquinas com Windows 10 em que testei) acessandoC:\ProgramData\Package Cache\{BD95A8CD-1D9F-35AD-981A-3E7925026EBB}v11.0.61030\packages\vcRuntimeMinimum_x86
eC:\ProgramData\Package Cache\{B175520C-86A2-35A7-8619-86DC379688B9}v11.0.61030\packages\vcRuntimeAdditional_x86
inspecionando os arquivos nos arquivos .cab.Me deparei com essa pergunta procurando uma resposta no contexto de verificação do Visual C ++ redistribuível como parte de um instalador MSI criado por WiX.
Não gostei de como o GUID mudou com a versão e o sistema operacional, então acabei criando uma ação personalizada escrita em C # para verificar se o Visual C ++ pode ser redistribuído.
Tudo a seguir é especificamente para Visual C ++ 2015 Redistributable (x64), mas pode ser facilmente modificado para qualquer versão.
Então, no arquivo wxs
Editar Estou atualizando esta resposta com algumas informações básicas sobre como criar e usar uma ação personalizada.
Para criar a ação personalizada no Visual Studio 2017 com a extensão WiX Toolset Visual Studio 2017 instalada, usei o modelo de projeto para criar uma ação personalizada (C # Custom Action Project para WiX v3).
Verifiquei o projeto gerado e parecia que já havia as alterações listadas no início deste artigo: https://www.codeproject.com/Articles/132918/Creating-Custom-Action-for-WIX-Written-in-Managed então peguei aquele artigo na seção
Adding Custom Action to the Installer
e o segui com alguns ajustes.Outra coisa que fiz foi mudar a versão do .NET framework em que o projeto foi criado para 3.5.
Não achei muito útil, mas você também pode ver http://wixtoolset.org/documentation/manual/v3/wixdev/extensions/authoring_custom_actions.html
fonte
Para mim, este local funcionou: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ DevDiv \ vc \ Servicing \ 11.0 \ RuntimeMinimum \ Version
Verifique qual versão você tem depois de instalar o pacote e use-a como uma condição em seu instalador. (o meu é definido para 11.0.50727 após a instalação do VCred).
fonte
Basta ir ao Painel de Controle> Programas e Recursos, e todos eles aparecem listados lá.
Não sou um especialista e essa resposta é muito simples em comparação com o que as pessoas estão respondendo (verificando o registro), então não tenho certeza se é a resposta correta, mas funcionou para mim.
fonte
fonte
Consegui fazer isso com InnoSetup.
Eu verifiquei a existência da chave de registro:
HKLM\SOFTWARE\Microsoft\VisualStudio\11.0\VC\Runtimes
Se desinstalado, ele não existe. Se instalado, ele existe.
A propósito, também pode estar no nó Wow6432:
HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\11.0\VC\Runtimes
fonte
Verificar o estado de instalação do produto por meio de MsiQueryProductState é praticamente equivalente a verificar o registro diretamente, mas você ainda precisa do GUID para o ProductCode .
Conforme mencionado em outro lugar, uma desvantagem dessas abordagens é que cada atualização tem seu próprio ProductCode!
Felizmente, a MSI fornece um UpgradeCode que identifica uma 'família' de produtos. Você pode usar o orca para abrir um dos MSIs para extrair essas informações. Por exemplo, o UpgradeCode for VS2015's redistributable é
{65E5BD06-6392-3027-8C26-853107D3CF1A}
Você pode usar MsiEnumRelatedProducts para obter todos os IDs de produto para esse UpgradeCode. Na prática, como cada atualização redist substitui a anterior, isso produzirá apenas um ProductCode - como
{B5FC62F5-A367-37A5-9FD2-A6E137C0096F}
para VS2015 Atualização 2 x86.Independentemente disso, você pode verificar a versão via MsiGetProductInfo (productCode, INSTALLPROPERTY_VERSIONSTRING, ...) ou funções semelhantes para comparar com a versão desejada, por exemplo, para verificar se há uma versão equivalente ou posterior.
Note-se que dentro de um aplicativo C ++, você também pode usar
_VC_CRT_MAJOR_VERSION
,_VC_CRT_MINOR_VERSION
,_VC_CRT_BUILD_VERSION
se você#include <crtversion.h>
- desta forma você pode determinar calcular a versão CRT que seu binário foi construído com.fonte
Este código PowerShell deve fazer o truque
fonte
Eu precisava da mesma coisa e, embora AFAIK isso não possa ser feito de forma programática, funcionou para mim.
Eu simplesmente fui para Iniciar -> Desinstalar um programa e rolei para baixo até encontrar o VC ++ redistribuível, que inclui um número de versão. Pesquisando o número da versão, me disse que pertence ao VS2012 SP1.
fonte
Pergunta antiga, mas aqui está a abordagem que usamos desde o Visual Studio 2005 com sucesso. Eu apenas testei usando o Visual Studio 2012 Update 4 também (já que estamos finalmente atualizando nosso software de 2010 a 2012).
Como os pacotes redistribuíveis do Visual C ++ registram seu desinstalador com o Windows (para que apareça na lista "Programas e Recursos" do Painel de Controle), simplesmente verificamos o Nome de Exibição da chave do desinstalador no registro.
Aqui está o código NSIS relevante:
Observe que, como nosso instalador é um exe de 32 bits, o Windows determina se a chave de registro está realmente no Wow6432Node virtualizado em vez do local acima, de modo que o código acima funciona em instalações com Windows de 64 e 32 bits sem ter que verificar as duas chaves explicitamente.
Observe também que, para atualizar o código acima para uma versão diferente do VC ++ Redist, basta alterar o GUID no caminho da chave de registro e o nome de exibição para o que for necessário.
Embora esse possa não ser o método recomendado, ele funcionou em mais de 10.000 máquinas nos últimos 10 anos executando todos os tipos de janelas do XP / XP64 até o Windows 10 usando redistores para 2005, 2010, 2010sp1 e agora 2012u4.
fonte
Eu verificaria o
Installed
valor deHKLM\SOFTWARE\[WOW6432Node]\Microsoft\Windows\CurrentVersion\Uninstall\{VCRedist_GUID}
chaveVC++ 2012 (x86)
é{33d1fd90-4274-48a1-9bc1-97e33d9c2d6f}
WOW6432Node
estará presente ou não dependendo doVC++ redist
produtofonte
O que a maioria das pessoas não percebe é a necessidade
/reg:32
de verificar a chave no Windows x64.Consulte o artigo da Ajuda da Microsoft sobre este assunto.
Aqui está um script que demonstra como verificar corretamente o Visual C ++ Redistributable para Visual Studio 2012 Update 4.
fonte
A solução de script do PowerShell:
Com base nas informações da resposta de @kayleeFrye_onDeck
Eu criei um script PowerShell que verifica e instala as versões que o usuário especifica, não fiz testes extensivos com ele, mas para o meu próprio cenário de CI (Integração Contínua) ele funciona perfeitamente.
O script completo e informações sobre o github
A abordagem que usei foi baseada na verificação dos regkeys com base nas informações fornecidas aqui. A seguir está a essência do que o script faz:
A verificação / download / instalação silenciosa com base na
$redistInfo
qual contém as informações compiladas de kayleeFrye_onDeck's.O script completo e mais informações podem ser encontrados no github
Qualquer pessoa é bem-vinda para contribuir, se eu tiver tempo farei testes mais extensos do script e continuarei tentando adicionar novos pacotes conforme as informações são adicionadas aqui.
fonte
É difícil obter todos os valores de registro para VC 2012, então escrevi uma pequena função que irá passar por todas as dependências e corresponder à versão especificada.
Dependências:
fonte
você pode pesquisar no registro. Na verdade, não tenho o vs2012, mas tenho o vs2010.
Existem 3 chaves de registro diferentes (mas muito semelhantes) para cada um dos 3 pacotes de plataforma. Cada chave possui um valor DWORD denominado “Instalado” com o valor 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
Você pode usar a função de registro para isso ......
fonte
HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\10.0\VC\VCRedist\...