Utilizzo di MSDN Ho ottenuto la classe per scrivere un wrapper per il mio strumento da riga di comando.Wrapper per uno strumento da riga di comando in C#
Ora sto affrontando un problema, se eseguo l'exe tramite la riga di comando con argomenti, funziona perfettamente senza errori.
Ma quando provo a passare gli argomenti dal Wrapper si blocca il programma.
Volevo sapere se sto passando gli argomenti correttamente e se ho torto, qualcuno potrebbe indicare per favore. Questa è la classe LaunchEXE da 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;
}
}
}
Questo è il modo in cui sto passando argomenti dal mio programma principale (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);
}
Lo strumento da riga di comando accetta il seguente comando e funziona perfettamente :
C: \ Program Files (x86) \ MyFolder>MyConsole.exe/BACKUP C: \ MyBackupProfile.txt
Quando si dice "arresta il programma", si ottiene un'eccezione, un messaggio di errore, qualcos'altro? – RQDQ
Solo il programma si blocca, ho i file di registro per quello strumento da riga di comando, ma non è costruito da me ... Ho ricevuto una risposta dallo sviluppatore di quello strumento che è colpa mia e il suo strumento sta funzionando bene. Ma questo è quello che ho ottenuto dal file di registro dello strumento ... "System.NullReferenceException: riferimento oggetto non impostato su un'istanza di un oggetto." tuttavia non ottengo alcun errore di eccezione nel mio programma ... –
Un punto di interruzione su newProcess.Start(); si arresta in modo anomalo al programma .. –