Commctrl.h de l’API Windows utilisant l’application ne fonctionne pas sur les machines sans le Kit de développement Platform SDK

J’ai écrit quelque chose qui utilise ce qui suit comprend:

#include  #include  #include  #include  #include  #include  

Ce code fonctionne bien sur 2 machines avec le Kit de développement Platform SDK installé, mais ne s’exécute pas (ni versions de débogage ni versions) sur des installations propres de Windows (machines virtuelles bien sûr). Il meurt avec le tout à fait familier:

 --------------------------- 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 --------------------------- 

Comment puis-je le faire fonctionner sur des installations propres? Quel dll utilise-t-il qu’il ne peut pas trouver? Mon pari est sur commctrl, mais quelqu’un peut-il m’expliquer pourquoi ce n’est pas avec toutes les fenêtres?

De plus, si quelqu’un a des astuces pour déboguer une telle chose, comme mon CPP est déjà rouillé, comme il semble 🙂

Edit – Ce qui a fonctionné pour moi, c’est de télécharger Redissortingbutable pour Visual Studio 2008. Je ne pense pas que ce soit une bonne solution – télécharger un fichier de 2 Mo et une installation pour exécuter un outil 11K simple. Je pense que je vais changer le code pour utiliser LoadLibrary pour obtenir les 2 ou 3 fonctions dont j’ai besoin de comctl32.dll. Merci tout le monde 🙂

Utilisez Walker Walker. Téléchargez et installez depuis http://www.dependencywalker.com/ (décompressez-le pour l’installer). Ensuite, chargez votre exécutable. L’outil mettra en évidence quelle DLL est manquante. Ensuite, vous pouvez trouver le pack redissortingbuable dont vous avez besoin pour accompagner votre exécutable.

Si vous utilisez VS2005, la plupart des cas seront couverts par http://www.microsoft.com/downloads/details.aspx?FamilyId=32BC1BEE-A3F9-4C13-9C99-220B62A191EE&displaylang=en qui comprend tout le nécessaire pour exécuter les EXE créés avec VS2005 . À l’aide de depend.exe, vous trouverez peut-être une solution plus légère.

Les contrôles communs sont un hareng rouge . Votre problème est que le runtime Visual C ++ 8.0 – je suppose que vous utilisez Visual Studio 2005 – n’est pas installé. Reliez statiquement à la bibliothèque d’exécution C / C ++ ou dissortingbuez la DLL d’exécution.

Vous aurez ce problème avec n’importe quel programme C ou C ++ qui utilise la DLL. Vous pouvez vous en sortir avec VS 6.0 car msvcrt.dll est venu avec le système d’exploitation de Windows 2000, et dans VS.NET 2003 que msvcr71.dll est venu avec .NET Framework 1.1. Pas plus. Visual Studio 2005 et les versions ultérieures utilisent des assemblys côte à côte pour empêcher l’enfer de la DLL, mais cela signifie que vous ne pouvez même pas compter sur l’installation de la version exacte du runtime C utilisée par votre programme .NET 2.0. mscorwks.dll .NET 2.0 se lie à la version 8.0.50608.0 dans son manifeste; une application générée par VS se lie à 8.0.50727.762 à partir de VS2005 SP1. Si je me souviens bien, il a utilisé une version préliminaire dans la version originale (RTM) de VS2005, ce qui signifiait que vous deviez déployer un module de fusion de règles Publisher si vous utilisiez les modules de fusion, pour redirect la liaison vers la version réellement disponible. C module de fusion à l’exécution.

Voir aussi Redissortingbution des fichiers Visual C ++ sur MSDN.

Je pense qu’il essaie de trouver une version des contrôles communs qui n’est pas installée. Vous devrez peut-être un fichier manifeste pour mapper la version des contrôles communs à votre système d’exploitation cible. En outre, vous devrez peut-être vous assurer que vous avez installé les mêmes environnements d’exécution de VC auxquels vous étiez lié.

Blog de Chris Jackson

EDIT: Un peu de recherche et j’ai confirmé (principalement) que c’est la version de votre runtime VC ++ qui est à blâmer. Vous devez dissortingbuer les versions avec lesquelles vous avez construit. Le SDK de la plate-forme inclut généralement un module de fusion à ces fins, mais il existe souvent un VCRedist.exe pour eux. Essayez de regarder les téléchargements de Microsoft.

KB94885