Janelas commctrl.h API usando o aplicativo não funciona em máquinas sem a Platform SDK

StackOverflow https://stackoverflow.com/questions/155191

  •  03-07-2019
  •  | 
  •  

Pergunta

Eu escrevi algo que usa a seguinte inclui:

#include <math.h>
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <commctrl.h>

Este código funciona bem em 2 máquinas com o Platform SDK instalado, mas não executa (versões nem depuração nem libertação) em instalações limpas do Windows (VMs é claro). Ele morre com o bastante familiar:

---------------------------
C:\Documents and Settings\Someone\Desktop\DesktopRearranger.exe
---------------------------
C:\Documents and Settings\Someone\Desktop\DesktopRearranger.exe

This application has failed to start because the application configuration is incorrect. Reinstalling the application may fix this problem.

---------------------------
OK   
---------------------------

Como posso fazê-lo funcionar em instalações limpas? Que dll é que usando o que ele não pode encontrar? Minha aposta é na commctrl, mas alguém pode me esclarecer sobre por que é não é com todos os Windows?

Ainda mais, se alguém tiver dicas sobre como depurar tal coisa uma, como meu CPP já está enferrujado, como parece:)

Edit - O que funcionou para mim está baixando o Redistributable para o Visual Studio 2008. Eu não acho que é uma boa solução - download de um arquivo de 2MB e uma instalação para executar uma simples 11K ferramenta. Eu acho que vou mudar o código para usar LoadLibrary para obter os 2 ou 3 funções que eu preciso de comctl32.dll. Obrigado a todos:)

Foi útil?

Solução

Use Dependency Walker. Baixar e instalar a partir http://www.dependencywalker.com/ (basta descompactar para instalar). Em seguida, carregar o seu executável. A ferramenta irá destacar que DLL está faltando. Depois, você pode encontrar o pacote redistribuível que você precisa de enviar com o seu executável.

Se você usar VS2005, a maioria dos casos serão cobertos pelo http://www.microsoft.com/downloads/details.aspx?FamilyId=32BC1BEE-A3F9-4C13-9C99-220B62A191EE&displaylang=en que inclui tudo o necessário para executar EXEs criados com VS2005. Usando depends.exe você pode encontrar uma solução mais leve, apesar de tudo.

Outras dicas

controles comuns é um arenque vermelho . Seu problema é que o Visual C ++ 8.0 tempo de execução - Eu suponho que você está usando o Visual Studio 2005 - não está instalado. Estaticamente link para o C / C ++ biblioteca de tempo de execução, ou distribuir a DLL de tempo de execução.

Você terá esse problema com qualquer programa C ++ que usa a DLL C ou. Você poderia fugir com ela no VS 6.0 como msvcrt.dll veio com o sistema operacional do Windows 2000, e em VS.NET 2003 como msvcr71.dll veio com .NET Framework 1.1. Não mais. Visual Studio 2005 e usar mais tarde side-by-side assembléias para evitar DLL Hell, mas isso significa que você não pode confiar mesmo em .NET 2.0 instalar a versão exata do tempo de execução C que do seu programa interno usos manifesto. de NET 2,0 liga mscorwks.dll a versão 8.0.50608.0 na sua manifesto; um VS-gerado liga de aplicação para 8.0.50727.762 como de VS2005 SP1. Minha lembrança é usado alguma versão de pré-lançamento na versão original (RTM) do VS2005, o que significava que você tinha que implantar um módulo de Política Editor de mesclagem se você estivesse usando os módulos de mesclagem, para redirecionar a ligação à versão realmente na liberado C módulo de tempo de execução direta.

Veja também Redistribuir o Visual C ++ Arquivos no MSDN.

Eu suspeito que está a tentar encontrar uma versão de controles comuns que não está instalado. Você pode precisar de um arquivo de manifesto para mapear a versão de controles comuns para o seu sistema operacional de destino. Além disso, você pode precisar para se certificar de ter instalado os mesmos tempos de execução VC que foram ligados a.

Chris Jackson blogue

EDIT: Um pouco de pesquisa e eu confirmou (a maioria) que é a versão de seus tempos de execução VC ++, que é a culpa. Você precisa distribuir as versões que você construiu com. A plataforma SDK inclui geralmente um módulo de mesclagem destes para esse fim, mas muitas vezes há uma VCRedist.exe para eles também. Tente olhar de downloads da Microsoft.

KB94885

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