2015-07-09 14 views
5

Ich versuche, den Prozess zu reagieren als String zu bekommen, damit ich es in anderem Ort in meinem Code verwenden kann, ist dies die Lösung, die ich bisher:Fehlermeldung "Das System kann die angegebene Datei nicht finden" bei process.Start();

const string ex1 = @"C:\Projects\MyProgram.exe "; 
     const string ex2 = @"C:\Projects\ProgramXmlConfig.xml"; 


     Process process = new Process(); 
     process.StartInfo.WorkingDirectory = @"C:\Projects"; 
     process.StartInfo.FileName = "MyProgram.exe "; 
     process.StartInfo.Arguments = ex2; 
     process.StartInfo.Password = new System.Security.SecureString(); 
     process.StartInfo.UseShellExecute = false; 
     process.StartInfo.RedirectStandardOutput = true; 

     try 
     { 
      process.Start(); 
      StreamReader reader = process.StandardOutput; 
      string output = reader.ReadToEnd(); 
     } 
     catch (Exception exception) 
     { 
      AddComment(exception.ToString()); 
     } 

Aber wenn ich diesen Mich renne erhalten:

"The system cannot find the file specified" error in process.Start(); without 
     process.StartInfo.UseShellExecute = false; 
     process.StartInfo.RedirectStandardOutput = true; 

der Code läuft gut, aber es nur offene Konsolenfenster und die alle Prozessantwort ist trow es so kann ich es nicht als Zeichenfolge verwenden.

Weiß jemand, warum ich diesen Fehler oder vielleicht eine andere Lösung für mein Problem bekomme?

Antwort

12

Ich vermute, das Problem ist, dass der Dateiname Sie die Angabe in Ihrem Arbeitsverzeichnis relativ ist, und Sie erwarten Process.Start dort zu suchen, wenn der Prozess beginnen - ich glaube nicht, dass es so funktioniert, wenn UseShellExecutefalse ist . Versuchen Sie, nur die absoluten Dateinamen des Prozesses spezifizieren mögen Sie starten:

process.StartInfo.FileName = @"C:\Projects\MyProgram.exe"; 

Bitte beachten, dass ich habe auch den Raum vom Ende der Zeichenfolge entfernen Sie für die FileName Eigenschaft zugewiesen wurden - es durchaus möglich, das war casuing das Problem auch.

+0

Es hat funktioniert! Vielen Dank ! –

+0

@DariaShalimov Wenn dies die Antwort auf Ihre Frage ist, markieren Sie als Antwort – Jamaxack

+0

Wie kann ich das tun? –

4

Für System32 Zugriff, wenn Sie versuchen, eine x86-Anwendung auf x64 zu starten, dann müssen Sie das Schlüsselwort "Sysnative" anstelle von "System32" in Ihrem Dateinamen verwenden.

Beispiel: statt:

C: \ Windows \ System32 \ whoiscl.exe

Es sollte:

C: \ Windows \ Sysnative \ WhoisCL. exe

Hoffe das hilft jemandem

Verwandte Themen