Używanie MSDN Mam klasę do napisania wrappera dla mojego narzędzia wiersza poleceń.Otoki dla narzędzia wiersza poleceń w języku C#
Mam teraz do czynienia z problemem, jeśli wykonanie exe za pomocą wiersza polecenia z argumentami, działa idealnie bez żadnych błędów.
Ale kiedy próbuję przekazać argumenty z opakowania, powoduje awarię programu.
Chciałem się dowiedzieć, czy poprawnie przekazuję argumenty, a jeśli się mylę, czy ktoś mógłby zwrócić na to uwagę? Jest to klasa LaunchEXE z MSDN
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
using System.IO;
namespace SPDB
{
/// <summary>
/// Class to run any external command line tool with arguments
/// </summary>
public class LaunchEXE
{
internal static string Run(string exeName, string argsLine, int timeoutSeconds)
{
StreamReader outputStream = StreamReader.Null;
string output = "";
bool success = false;
try
{
Process newProcess = new Process();
newProcess.StartInfo.FileName = exeName;
newProcess.StartInfo.Arguments = argsLine;
newProcess.StartInfo.UseShellExecute = false;
newProcess.StartInfo.CreateNoWindow = true; //The command line is supressed to keep the process in the background
newProcess.StartInfo.RedirectStandardOutput = true;
newProcess.Start();
if (0 == timeoutSeconds)
{
outputStream = newProcess.StandardOutput;
output = outputStream.ReadToEnd();
newProcess.WaitForExit();
}
else
{
success = newProcess.WaitForExit(timeoutSeconds * 1000);
if (success)
{
outputStream = newProcess.StandardOutput;
output = outputStream.ReadToEnd();
}
else
{
output = "Timed out at " + timeoutSeconds + " seconds waiting for " + exeName + " to exit.";
}
}
}
catch (Exception e)
{
throw (new Exception("An error occurred running " + exeName + ".", e));
}
finally
{
outputStream.Close();
}
return "\t" + output;
}
}
}
ten sposób jestem przechodzącej argumenty z mojego programu głównego (Form1.cs)
private void button1_Click(object sender, EventArgs e)
{
string output;
output = LaunchEXE.Run(@"C:\Program Files (x86)\MyFolder\MyConsole.exe", "/BACKUP C:\\MyBackupProfile.txt", 100);
System.Windows.Forms.MessageBox.Show(output);
}
Narzędzie wiersza poleceń akceptuje następujące polecenie i działa idealnie :
C: Program Files \ (x86) \ MyFolder>MyConsole.exe/backup C: \ MyBackupProfile.txt
Kiedy mówisz "zawiesza się program", otrzymujesz wyjątek, komunikat o błędzie, coś innego? – RQDQ
Po prostu program się zawiesza, mam pliki dziennika dla tego narzędzia wiersza poleceń, ale nie jest on zbudowany przeze mnie ... Dostałem odpowiedź od twórcy tego narzędzia, że to moja wina, a jego narzędzie działa dobrze. Ale to właśnie wydostałem z pliku dziennika narzędzia ... "System.NullReferenceException: Odwołanie do obiektu nie jest ustawione na instancję obiektu." jednak nie dostaję żadnego wyjątku błędu w moim programie ... –
Punkt przerwania w newProcess.Start(); sam zawiesza program .. –