2012-02-24 6 views
1

J'essaie d'exécuter un exécutable à partir d'un programme C++. J'ai regardé et trouvé 2 options:
système ("C: \ filepath \ file.exe"); ShellExecute (GetDesktopWindow(), "ouvrir", "C: \ fichier_chemin \ fichier.exe", NULL, NULL, SW_SHOWNORMAL)
et

Tout est beau, sauf que ça ne marche pas.
Pour la première option, j'ai dû inclure, en dehors de windows.h, aussi cstdlib, sinon mon code ne s'est pas construit.
Quand je lance le programme, je reçois l'erreur: l'option
« file.exe » est pas reconnu comme une commande interne ou externe
J'ai mis le Common Language Runtime Support (/ clr de) pour mon projet (et je a également dû définir l'option DLL de débogage multithread (/ MDd) pour la bibliothèque d'exécution, sinon, il ne serait pas construire).
La deuxième option ne sera pas construite même si les deux bibliothèques sont incluses. J'obtiens l'erreur:
erreur C3861: « ShellExecute »: identificateur non trouvé

J'utilise VS2010 sur Windows7 - et je voudrais que cela fonctionne sur multi-plateformes ...
C++ Exécution d'un processus externe

Est-ce que je demande trop?
Merci.

+0

Si vous voulez que ce soit multiplateforme, vous ne pouvez pas utiliser le 'ShellExecute' spécifique à Windows. Votre commande 'system' est correcte; on dirait que vous lui avez donné un chemin incorrect. – Borealid

+0

Essayez d'échapper les barres obliques inverses dans l'argument de chaîne à 'system()': 'system (" C: \\ filepath \\ file.exe ");'. Les chances sont que votre premier extrait de code fonctionnera comme prévu alors. –

+0

J'ai échappé au \\, et mon chemin est correct – Thalia

Répondre

1

Notez que je l'ai écrit dans ma question: je mets le Common Language Option de support d'exécution (/ clr). Je l'ai fait à cause d'une erreur précédente l'a suggéré.
Dès que j'ai supprimé cette option, j'ai été en mesure d'exécuter l'exécutable. Peut-être que le code non géré doit rester non géré ...

1

Vous devez remplacer vos antislashs avec double barre oblique inverse, sinon le compilateur les interprète comme des séquences d'échappement:

system("C:\\filepath\\file.exe"); 

En ce qui concerne ShellExecute, vous devez inclure Shellapi.h ainsi que Windows.h, et vous don Pas besoin de définir le drapeau /clr. ShellExecute fait partie de l'API Windows, donc il ne fonctionnera pas sur d'autres plateformes.

+0

J'ai échappé au \\ – Thalia

+0

@ user1217150 Etes-vous sûr que votre fichier existe et est où vous l'avez dit? – spencercw

+0

Après avoir inclus Shellapi.h - la construction a juste été drôle. Après avoir répertorié quelques erreurs de INSIDE Shellapi.h, j'ai même obtenu ce qui suit: "erreur fatale C1003: le nombre d'erreurs dépasse 100, arrêter la compilation". Je ne pense pas que ce programme m'aime bien. – Thalia

2

When I run the program, I get the error: "file.exe" is not recognized as an internal or external command

Si je démarre une invite de ligne de commande et tapez file.exe ce que je reçois:

Microsoft Windows [Version 6.1.7100] 
Copyright (c) 2009 Microsoft Corporation. All rights reserved. 

C:\>file.exe 
'file.exe' is not recognized as an internal or external command, 
operable program or batch file. 

C:\> 
Questions connexes