Pergunta

Eu tenho uma pergunta muito semelhante ao esta mas a resposta faz não trabalho para mim.

Software Estou mantendo a configuração para depende VC ++ 2008 (SP1, precisamente), assim eu preciso encontrar uma solução para instalar VCRedist se ainda não instalado. Eu entendo a maneira correta seria construir msi com módulos de mesclagem, mas não está em minhas mãos.

A resposta da pergunta duplicado Refiro-me à (o aceita) não funciona para mim, porque cada versão minúscula (por exemplo 9.0.30729.01 vs 9.0.30729.17) tem GUIDs adequadas, que eu não sou capaz de adivinhar ou prever para versões futuras. Além disso, eu acho que isso não iria detectar Visual Studios e, assim, desnecessariamente instalar o pacote VCRedist quando ele já está em uma máquina de desenvolvedores. Eu não quero qualquer um bug com isso, certamente não alguém que já tem um DevStudio instalado.

Agora, outra resposta diz que eu deveria olhar no winsxs-pasta como $WINDIR\WinSxS\x86_Microsoft.VC80.CRT_ mas isso não (ainda) ajuda-me a entender SP1, ou há algo que eu estou em falta neste momento? Existe uma em algum lugar da tabela com os números internos e versão "externo", então eu poderia implicar um certo número de versão secundário?

Eu não posso acreditar que não há nada fornecido pela Microsoft para este cenário, mas procurando os interwebs para já muito tempo agora me traz de volta ao bom e velho SO:)

Foi útil?

Solução

Você poderia tomar a abordagem recomendada para instalar o DirectX: sempre corre o redistribuível. Uma vez que é necessário e você já está enviá-lo não há mal nenhum em executá-lo mesmo se ele já está instalado.

Outras dicas

Para Visual Studio C ++ 2010, as coisas ficaram um pouco mais fácil .

Ao contrário do Visual C ++ 2005 e 2008 pacotes redistribuíveis, existem chaves de registro que podem ser usados ??para detectar a presença do 2010 pacote redistribuível Visual C ++.

Visual C ++ valores de registro de detecção 2010 Redistributable Package

Visual C ++ 2010 Redistributable Package (x86)

[HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ VisualStudio \ 10.0 \ VC \ VCRedist \ x86] Instalado = 1 (REG_DWORD)

Visual C ++ 2010 Redistributable Package (x64)

[HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ VisualStudio \ 10.0 \ VC \ VCRedist \ x64] Instalado = 1 (REG_DWORD)

Visual C ++ 2010 Redistributable Package (ia64)

[HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ VisualStudio \ 10.0 \ VC \ VCRedist \ ia64] Instalado = 1 (REG_DWORD)

Nota : Você terá que verificar sob Wow6432Node em um 64-bit OS. (HKLM \ Software \ Wow6432Node \ Microsoft ....)

Se você gosta da versão mais antiga, aqui estão os GUIDs

Visual C ++ 2010 Códigos pacote redistribuível

  • Visual C ++ 2010 Redistributable Package (x86) - {196BB40D-1578-3D01-B289-BEFC77A11A1E}
  • Visual C ++ 2010 Redistributable Package (x64) - {DA5E371C-6333-3D8A-93A4-6FD5B20BCC6E}
  • Visual C ++ 2010 Redistributable Package (ia64) - {C1A35166-4301-38E9-BA67-02823AD72A1B}

Visual C ++ 2010 SP1 códigos de produto pacote redistribuível

  • Visual C ++ 2010 SP1 Redistributable Package (x86) - {F0C3E5D1-1ADE-321E-8167-68EF0DE699A5}
  • Visual C ++ 2010 SP1 Redistributable Package (x64) - {1D8E6291-B0D5-35EC-8441-6616F567A0F7}
  • Visual C ++ 2010 SP1 Redistributable Package (ia64) - {88C73C1C-2DE5-3B01-AFB8-B46EF4AB41CD}

Parece que há outra solução proposto por um Microsoft-Developer, usando MsiQueryProductState API , infelizmente, também contando com os GUIDs .

Atualização : O código entrou no ar ontem e parece estar funcionando bem. Aqui está o que hoje vem sendo realizado: Ele está marcada para o GUID mais recente conhecida-a-mim e os path² to-onde-você-está-suposto-a-ser-instalado. Se ambos falhar, ele está instalado. Isso parece funcionar bem.

Além disso, ele é instalado com os argumentos de linha de comando "/ qb", que significa "sem supervisão, mas não invisíveis". Consulte este outro post sobre esses parâmetros.

FWIW, GUIDs para Microsoft Visual C ++ 2008 / VC90 SP1 Redistributable - x86 9.0.30729

  • 64bit 30.729,17: 8220EEFE-38CD-377E-8595-13398D740ACE
  • 32bit 30.729,17: 9A25302D-30C0-39D9-BD6F-21E6EC160475
  • 32bit 30.729,01: 6AFCA4E1-9B78-3640-8F72-A7BF33448200

² O caminho: $WINDIR\WinSxS\x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.30729*

I open-source um projeto ++ no Github Visual C que verifica a existência de VC ++ redistribuível DLLs especificamente e disponibilizado sob a licença Apache 2.0.

Tem três diferentes métodos para verificação da disponibilidade de VC ++ 9 e VC ++ 10 tempos de execução:

  1. Verifica a APIs MsiQueryProductState;
  2. Verifique o conteúdo dos WinSxS pasta para diretórios de produto de harmonização; e
  3. Verifica o diretório de trabalho atual para todas as versões locais do VC ++ 9 e VC ++ 10 tempos de execução (e inspeciona seus conteúdos.)

Aqui está uma amostra do que usá-lo realmente se parece com:

 wcout << _T("Checking for the availability of VC++ runtimes..") << endl;
 wcout << _T("----------- Visual C++ 2008 (VC++9) -----------") << endl;
 wcout << _T("Visual C++ 2008 (x86) ? ") << (IsVC2008Installed_x86() ? _T("true") : _T("false")) << endl;
 wcout << _T("Visual C++ 2008 (x64) ? ") << (IsVC2008Installed_x64() ? _T("true") : _T("false")) << endl;
 wcout << _T("Visual C++ 2008 SP1 (x86) ? ") << (IsVC2008SP1Installed_x86() ? _T("true") : _T("false")) << endl;
 wcout << _T("Visual C++ 2008 SP1 (x64) ? ") << (IsVC2008SP1Installed_x64() ? _T("true") : _T("false")) << endl;

Eu licenciou a CRT-detector projeto sob Apache 2.0, tão à vontade para usá-lo em seus próprios aplicativos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top