Question

Je suis en train d'obtenir le code suivant au travail, je peux appeler un script perl de mon c # programme. Je développe l'utilisation stdio visuelle 2008 sur pack3 XP Service.

 myProcess = new Process();
        ProcessStartInfo myProcessStartInfo = new ProcessStartInfo("perl.exe");
        myProcessStartInfo.Arguments = @"C:\Documents and Settings\test_perl.pl";
        myProcessStartInfo.UseShellExecute = false;
        myProcessStartInfo.RedirectStandardOutput = true;
        myProcessStartInfo.WindowStyle = ProcessWindowStyle.Hidden;
        myProcessStartInfo.CreateNoWindow = true;
        myProcess.StartInfo = myProcessStartInfo;

        myProcess.Start();
        string output = myProcess.StandardOutput.ReadToEnd();
        MessageBox.Show(output);
        myProcess.WaitForExit();

Je vérifie la test_perl.pl existe et si je change le perl.exe à notepad.exe, Thie ci-dessus fonctionne code. Mais si j'utilise perl.exe, la boîte de message est vide.

Impossible de comprendre pourquoi cela est faux. S'il vous plaît aidez-moi si vous savez pourquoi.

Merci

Était-ce utile?

La solution

Peut perl.exe gérer les chemins non cotés contenant des espaces sur la ligne de commande? Essayez de citer le chemin:

myProcessStartInfo.Arguments = @"""C:\Documents and Settings\test_perl.pl""";

Étant donné que les arguments de ligne de commande sont délimités par des espaces, à moins que le chemin du fichier est cité, l'application (perl.exe, dans ce cas) verra trois arguments:

  1. C: \ Documents
  2. et
  3. Settings \ test_perl.pl

Perl essaiera probablement d'ouvrir le fichier "C: \ Documents". Cela n'existe pas, bien sûr. La solution est de citer les chemins de fichiers contenant des espaces (ou tous les chemins de fichiers, pour être cohérent).

Vous mentionnez que gère notepad.exe chemins de fichiers non cotées fin. Probablement, c'est juste bloc-notes étant plus intelligent que l'ours moyen, et la fusion de ses arguments pour vous.

Et vérifier qu'un fichier existe à ce chemin, bien sûr. C'est en fait un chemin un peu inhabituel; normalement, vous verrez les fichiers utilisateur dans quelque chose comme C:. \ Documents and Settings \ myusername \ Documents \ fichier.ext , ou tel

Autres conseils

est-perl dans votre %PATH%? Ouvrez une invite de commande et tapez « perl -v »

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