2010-03-10 6 views
4

J'ai une application de lancer un fichier exécutable qui est dans le même dossier que cette application, en faisant:Lancement d'un fichier .exe dans le dossier en cours échoue parfois

  Process procStarter = new Process(); 
      procStarter.StartInfo.FileName = "OtherApp.exe"; 
      procStart.Start(); 

qui fonctionne très bien, jusqu'à ce que j'utilisé un fichier ouvert ou fichier sauver la boîte de dialogue dans mon application. Puis il ne peut pas trouver OtherApp.exe.

Cela vous semble-t-il normal? Puis-je le réparer en ajoutant le dossier actuel à StartInfo.Filename (et comment puis-je obtenir le dossier actuel)?

Répondre

10

Utilisation de la boîte de dialogue de fichier modifie probablement le répertoire courant de votre processus. Pour accéder à un fichier dans le même dossier que l'exécutable en cours, vous pouvez utiliser le code suivant:

string path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); 
path = Path.Combine(path, "OtherApp.exe"); 
0

Essayez explicitement de spécifier le chemin d'accès à OtherApp.exe.

Votre boîte de dialogue de fichier ouvert peut changer le répertoire actuel.

0

Si vous ne spécifiez pas explicitement le dossier, le système recherchera dans le «répertoire de travail actuel» le processus.

Le répertoire de travail actuel (habituellement) commence comme répertoire d'application exe, mais peut être modifié en accédant à une boîte de dialogue Ouvrir ou Enregistrer.

L'utilisation d'un chemin de fichier explicite est la bonne réponse. Le meilleur moyen est de ne pas s'appuyer sur le répertoire de travail, mais d'utiliser le chemin de fichier de l'exécutable actuel comme base.

Voici quelques façons de le faire: Application.StartupPath, Application.ExecutablePath

code pourrait ressembler à quelque chose comme ça ...

var exeName = "sample.exe"; 
var exePath 
    = Path.Combine(
     Path.GetDirectoryName(Application.ExecutablePath), 
     exeName); 
3

Ou vous pouvez ajouter à votre code:

saveFileDialog1.RestoreDirectory = true ; 

lors de la demande des noms de fichiers.

1

Le problème est que vous pouvez éventuellement modifier le répertoire de travail en cours lors d'autres opérations de fichiers. Vous souhaitez vous souvenir du chemin que les autres affiches vous ont montré, mais il se peut que vous souhaitiez créer votre propre instance ProcessStartInfo et utiliser la propriété ProcessStartInfo.WorkingDirectory afin de vous souvenir du chemin correct.

0

Essayez System.IO.Path.Combine(System.Windows.Forms.Application.StartupPath, "myfile.exe");

Si ce n'est pas une réponse de projet WinForms divo est meilleur (imo, au moment de cette réponse)

Questions connexes