2015-07-09 17 views
5

Próbuję uzyskać reagować procesu jako ciąg, dzięki czemu można go używać w innym miejscu w kodzie, jest to rozwiązanie, które mam tak daleko:"System nie może odnaleźć pliku określonego" error on 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()); 
     } 

Ale kiedy biegnę to ja otrzymujemy:

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

Kod działa poprawnie, ale to tylko otwarte okno konsoli i cały proces jest odpowiedź trow tam, więc nie mogę go używać jako ciąg.

Czy ktoś wie, dlaczego otrzymuję ten błąd lub może inne rozwiązanie mojego problemu?

Odpowiedz

12

Podejrzewam, że problemem jest to, że nazwa pliku jesteś określenie jest w stosunku do katalogu roboczego i czekasz Process.Start tam zajrzeć kiedy rozpoczęciem procesu - nie wierzę, to działa w ten sposób, gdy UseShellExecute jest false . Spróbuj po prostu określający bezwzględną nazwę pliku procesu chcesz rozpocząć:

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

Zauważ, że ja również usunięte przestrzeni od końca łańcucha zostałeś przypisywania dla właściwości FileName - to całkiem możliwe, że został casuing problem też.

+0

Zadziałało! dzięki ! –

+0

@DariaShalimov, jeśli jest to odpowiedź na twoje pytanie, oznacz jako odpowiedź – Jamaxack

+0

Jak mogę to zrobić? –

4

Aby uzyskać dostęp do System32, jeśli próbujesz uruchomić aplikację x86 na x64, musisz użyć słowa kluczowego "Sysnative" zamiast "System32" w nazwie pliku.

EG: zamiast:

C: \ Windows \ System32 \ whoiscl.exe

Należy:

C: \ Windows \ Sysnative \ whoiscl. exe

Mam nadzieję, że to pomoże komuś

Powiązane problemy