Lancement d'un fichier EXE impossible.

Résolu
1ModdingMaster Messages postés 30 Date d'inscription jeudi 7 juillet 2011 Statut Membre Dernière intervention 8 septembre 2014 - 19 juil. 2014 à 01:28
1ModdingMaster Messages postés 30 Date d'inscription jeudi 7 juillet 2011 Statut Membre Dernière intervention 8 septembre 2014 - 20 juil. 2014 à 18:18
Bonjour je reviens vers vous car j'ai un petit problème, sûrement au niveau de mon code. Lorsque je clique sur un bouton présent sur l'application, je souhaite lancer l'exécution d'un autre programme déjà compilé (fichier EXE), en utilisant cette technique :

System.Diagnostics.ProcessStartInfo FileEditBDD = new System.Diagnostics.ProcessStartInfo();

FileEditBDD.FileName = "exe/edit_bdd.exe";

System.Diagnostics.Process.Start(FileEditBDD);


Ainsi ce fichier "edit_bdd.exe" se trouve dans un dossier nommé "exe" se trouvant lui-même à la racine du dossier où se situe le programme de départ.

Malheureusement cela ne marche pas, lorsque je presse le bouton pour lancer "edit_bdd.exe", une fenêtre d'erreur apparait me disant qu'il ne trouve pas ce fameux "edit_bdd.exe". Alors j'ai essayé de changer le répertoire, ainsi j'ai placé "edit_bdd.exe" là où se situe le programme principal et là ça marche, cependant je souhaite tout de même le lancer depuis le dossier "exe", j'y tiens.

Y a-t-il quelque chose que j'aurais oublié dans mon code ?

Merci d'avance à celui qui me répondra.


NB : "exe/edit_bdd.exe" ne marche pas, par contre quand je souhaite exploiter un morceau de musique se trouvant par exemple dans "wav/music.wav" ça marche, le son est bien présent. Bizarre ! Peut être que cela provient d'un niveau de protection Windows ? Merci.

4 réponses

Whismeril Messages postés 19024 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 18 avril 2024 656
19 juil. 2014 à 13:26
Bonjour
si tu travailles sur windows, le répertoire c'est \ et non /.

Le caractère \ dans un string est interprété comme le caractère d'échappement, par exemple \t vaut tabulation.
Pour écrie une adresse, il faut échapper \ par lui-même, donc "exe\\edit_bdd.exe", une façon de simplifier est de mettre @ avant le string, ainsi le compilateur sait qu'il s'agit d'une adresse @"exe\edit_bdd.exe"
0
1ModdingMaster Messages postés 30 Date d'inscription jeudi 7 juillet 2011 Statut Membre Dernière intervention 8 septembre 2014 1
20 juil. 2014 à 01:16
Bonjour et merci encore une fois Whismeril c'est gentil de ta part, cette technique fonctionne. Par contre du coup quand je garde mon ancienne technique avec "wav/music.wav" ça marche bien que je n'utilise pas l'antislash. Étonnant, mais bon je laisse ainsi.

Par contre j'ai une autre question toujours le même sujet, si je reprend "edit_bdd.exe" qui est maintenant dans le dossier "exe" mais que je lui fait appeler certaines ressources comme des images ou des sons que j'utilise aussi dans le logiciel principal, j'ai une erreur me disant qu'il ne trouve pas ces ressources. J'ai écrit ceci comme code de Sound.Location ou d'Image.Location :

"../wav/music.wav"


Ça ne marchait pas alors j'ai utilisé ta technique :

@"..\wav\music.wav"


Et ça ne marche toujours pas ! Quand je suivais les cours de réseau on m'a appris que le double point permettait de retourner au précédent répertoire et là mes ressource se trouvent dans un dossier "wav" juste en dessous du dossier "exe".

N'est-ce pas le bon code ?

Merci de ta réponse Whismeril.
0
Whismeril Messages postés 19024 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 18 avril 2024 656
20 juil. 2014 à 10:00
Bonjour, pour les .. je ne sais pas si C# reconnait cette séquence.
Par contre tu peux utiliser Application.StartupPath, en remplaçant le dernier répertoire "exe", par "wav\\music.wav":
string monChemin = Application.StartupPath.Replace("exe", "wav\\music.wav");

0
1ModdingMaster Messages postés 30 Date d'inscription jeudi 7 juillet 2011 Statut Membre Dernière intervention 8 septembre 2014 1
20 juil. 2014 à 14:19
Bonjour Whismeril, n'ayant pas très bien compris ta technique j'ai essayé de voir toutes les possibilités, avec mon ami google j'ai trouvé qu'à la place de (..) on pouvait utiliser (~) en C#, mais le résultat fut sans succès, alors je me suis dit qu'au lieu de (..) si j'utilisais (.), au cas où, et puis finalement c'est ça. Du coup encore une fois sujet résolu, j'ai du mal à y croire car j'étais à peu près sûr que le double point (..) était utilisé pour remonter un dossier et le point unique (.) pour rester à la racine même.

@".\wav\music.wav"
@".\img\btn_button_p.png"


Merci de ton aide quand même, ça m'a placé sur la bonne voie je pense.
0
Whismeril Messages postés 19024 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 18 avril 2024 656
20 juil. 2014 à 14:45
Et bien, tu m'aura appris un truc!

Ma méthode repose sur la classe Application qui retourne tout un tas de données sur ton programme en cours de fonctionnement.
La propriété StartUpPath retourne le répertoire d'ou l'appli a démarré
0
1ModdingMaster Messages postés 30 Date d'inscription jeudi 7 juillet 2011 Statut Membre Dernière intervention 8 septembre 2014 1
20 juil. 2014 à 18:18
Pour le nombre de fois que tu m'aura aidé depuis mon inscription...
0
Rejoignez-nous