Problème d’application de frai

Gosh, c’est tellement bizarre, je ne sais pas quoi dire. La version courte est que j’ai une application de simulateur que je génère depuis mon application lorsque l’utilisateur me le demande. Il a récemment cessé de fonctionner, bien que je puisse exécuter le simulateur correctement à partir de la ligne de commande ou du menu Démarrer. Cela pourrait être dû au passage à VS2010 ou Windows 7 ou à quelque chose que je n’ai pas remarqué en examinant les différences de contrôle de source.

J’ai un deuxième simulateur que j’essaie de reproduire de la même façon et ça marche bien.

Par défaut, j’utilise le wrapper QProcess de Qt3 autour de CreateProcess à cette fin, mais j’obtiens le même comportement en utilisant system, mes propres CreateProcess et ShellExecute.

ShellExecute d’un cmd.exe “/ c parameters d’application” me fournit cependant plus d’informations. Je reçois le dialog

“Le programme ne peut pas démarrer car MSVCR80.dll est absent de votre ordinateur. Essayez de réinstaller le programme pour corriger ce problème.”

De manière peu pratique, l’application parent et le second simulateur utilisent MSVCR80.dll.

Lors de la copie de MSVC * 80.dll de g: \ windows \ winsxs \ x86_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.4927_none_d08a205e442db5b5 vers le même répertoire que mon exécutable, le message d’erreur devient

“Erreur d’exécution!
Programme: g: \ path \ to \ app.exe
R6034
Une application a tenté de charger la bibliothèque d’exécution C de manière incorrecte.
Veuillez contacter l’équipe d’assistance de l’application pour plus d’informations.

Suivi par

L’application n’a pas pu démarrer correctement (0xc0000142). Cliquez sur OK pour fermer l’application.

Et, encore une fois, l’application fonctionne bien depuis la ligne de commande avec ces DLL en place.


Mettre à jour:

Je me doutais que c’était peut-être lié à l’environnement, donc j’ai changé mon mécanisme ShellExecute pour qu’il utilise les parameters cmd / c set && app. J’ai configuré un cmd.exe avec ces mêmes parameters et mon application se bloque maintenant de la même manière. Mettra à jour quand je comprend pourquoi 🙂

C’est l’outil d’exécution du composant MATLAB qui modifie la variable PATH de mon processus. Il prépare son propre répertoire de dll et fait des ravages.

Un outil idiot que j’utilisais a fait un setenv sur PATH, en ajoutant un répertoire qu’il voulait pour charger dynamicment certains fichiers dll, mais qui a endommagé mon application plus tard. J’ai fini par utiliser GetEnvironmentSsortingngs comme indiqué dans le dernier exemple, en effaçant la première entrée de la variable d’environnement PATH et en envoyant le nouvel environnement (original) à QProcess, qui encapsule CreateProcessA.

Vous devez installer le CRT

Cela peut marcher – si ça casse, tu peux garder les deux morceaux 🙂

Essayez d’installer VC ++ redissortingbuable à partir d’ici – http://www.microsoft.com/downloads/en/details.aspx?familyid=A5C84275-3B97-4AB7-A40D-3802B2AF5FC2&displaylang=en .

N’oubliez pas de sauvegarder votre système, créez un sharepoint restauration, etc. avant d’installer des éléments.

Une autre idée, qui consiste à réinstaller l’application défaillante elle-même. Il peut venir avec sa propre copie de redissortingbuables VC ++, et la réinstallation peut aider. Esp. essayer de le réinstaller en utilisant le mode de compatibilité de Windows 7 (peut-être revenir à la compatibilité Vista ou XP) pourrait être encore plus efficace.

Pour réitérer – vous devrez essayer, et je ne sais pas vraiment si l’une des idées ci-dessus vous fera du bien, ou même vous assurer de ne pas faire de mal. Cela dit, si j’étais confronté à un problème similaire, ce sont les étapes que je voudrais essayer. HTH!