Question

Je suis en train de déboguer et de résoudre certains problèmes avec une application macro Win32 C ++ écrit mais je vais avoir le plus étrange question.

Je dois lancer un programme de 16 bits, puis simulent la saisie des données dans et ai utilisé ShellExecute depuis plus de deux ans. Je ne l'ai pas touché ce code réel du tout, mais maintenant il ne fonctionne pas.

Je fais ShellExecute(NULL, "open", exe_path.c_str(), NULL, "", SW_SHOWDEFAULT);. Cela a fonctionné parfaitement pendant des années, mais tout d'un coup, il a cessé de travailler . Il me donne un code d'erreur ACCESS_DENIED. J'ai googlé et apparemment c'est un problème assez commun avec le lancement des applications 16 bits.

Le poste de travail XP SP2 environnement n'a pas changé du tout, et il travaillait en fait jusqu'à ce que je rebâti un peu de temps auparavant (je l'ai reconstruit avant à plusieurs reprises).

Le code est à l'intérieur d'une fonction de procédure de fenêtre et quand je le prends et le lancement du programme dans la fonction WinMain cela fonctionne, mais le code doit être dans la procédure de fenêtre ...

J'ai essayé de nombreuses solutions de rechange, mais ils donnent tous la même question.

Le plus gros problème avec ceci est il travaillait alors tout d'un coup a décidé qu'il était ne va pas sans changement à la fois le code et l'environnement! En fait, il était à peu près à mi-chemin par des tests changements qu'il pensait qu'il arrêterait de travailler.

S'il vous plaît aide que je ne peux rien faire sans le lancement du programme. Il est la première étape dans le code que je débogage!

Était-ce utile?

La solution

Je l'ai découvert la question. J'ai changé le paramètre lpDirectory (dont j'approvisionnait de NULL ou "") dans le répertoire de l'exécutable, en utilisant la fonction PathRemoveFileSpec().

L'application lance à nouveau. maintenant je peux continuer à fixer le repos du programme!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top