Frage

Ich versuche, den folgenden Code zur Arbeit zu kommen, damit ich ein Perl-Skript aufrufen kann aus meiner c # Programm. Ich entwickle visuellen stdio 2008 mit auf XP Service Pack3.

 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();

prüfe ich die test_perl.pl existiert und wenn ich die perl.exe zu notepad.exe ändern, thie obigen Code funktioniert. Aber wenn ich perl.exe verwenden, das Meldungsfeld ist leer.

Kann nicht herausfinden, warum dies falsch ist. Bitte helfen Sie mir, wenn Sie wissen, warum.

Danke

War es hilfreich?

Lösung

Kann perl.exe Griff unquoted Pfade mit Leerzeichen auf der Kommandozeile? Versuchen Sie unter Angabe der Pfad:

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

Da Befehlszeilenargumente durch Leerzeichen getrennt werden, es sei denn, der Dateipfad angegeben wird, die Anwendung (perl.exe, in diesem Fall) drei Argumente sehen:

  1. C: \ Dokumente
  2. und
  3. Einstellungen \ test_perl.pl

Perl wird wahrscheinlich versuchen, die Datei zu öffnen "C: \ Documents". Dies ist nicht vorhanden, natürlich. Die Lösung ist zu zitieren Dateipfade, die Leerzeichen (oder alle Dateipfade, konsistent zu sein) enthalten.

Sie erwähnen, dass notepad.exe Griffe nicht notierten Dateipfade in Ordnung. Wahrscheinlich ist, dass nur Notizblock schlauer als der durchschnittliche Bär zu sein, und seine Argumente für Sie verschmelzen.

Und überprüfen, ob eine Datei in diesem Pfad vorhanden ist, natürlich. Das ist eigentlich ein etwas ungewöhnlicher Weg; \ Dokumente und Einstellungen \ myusername \ Documents \ file.ext , oder solche

:. In der Regel werden Sie Benutzerdateien in so etwas wie C sehen

Andere Tipps

Ist Perl in Ihrem %PATH%? Öffnen Sie eine Eingabeaufforderung und geben Sie in „perl -v

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top