現在、C#コードで実行している.exeがあります。.exeは特定の場所からファイルのリストを収集します。実行すると、ユーザーはescを押して終了するかEnterキーを押して再収集するように求められます。これをコードから自動化されたプロセスとして実行しようとしているので、-sなどのコマンドライン引数を追加して、ユーザー入力のプロンプトをバイパスしたいと思います。これをバイパスしないと、.exeが閉じることはなく、ソフトウェアは最終的にクラッシュします。これが私の.exeコードです
class StackGrabber
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main(string[] args)
{
try
{
StackReader.MessageHandler.OnMessage += new StackReader.MessageHandler.NotificationHandler(OnNotification);
StackGrabber grabber = new StackGrabber();
grabber.Grab();
}
catch (Exception ex)
{
DisplayMessage(ex.ToString());
}
}
private volatile bool IsComplete = false;
private StackReader.StackReader reader;
void Grab()
{
try
{
DisplayMessage("Grabbing stacks... \n");
reader = new StackReader.StackReader();
reader.OnReadComplete += new System.Windows.Forms.MethodInvoker(OnComplete);
if (reader.ReadStacks() > 0)
{
while (!reader.IsComplete)
Thread.Sleep(500);
}
else
{
Thread.Sleep(500);
}
DisplayMessage(Environment.NewLine + "Press esc to exit" + Environment.NewLine);
//...
//...
Console.Read();
}
catch (Exception ex)
{
DisplayMessage(ex.ToString());
}
}
public static void OnNotification(string msg)
{
DisplayMessage(msg);
}
public void OnComplete()
{
IsComplete = true;
}
private static object ConsoleLock = new object();
private static void DisplayMessage(string msg)
{
lock (ConsoleLock)
{
Console.WriteLine(msg);
}
}
}
そして、私はこのように実行可能ファイルを呼び出します:
StackGrab.StartInfo.FileName = @"..\\bin\\StackGrabber.exe";
StackGrab.StartInfo.CreateNoWindow = true;
StackGrab.StartInfo.UseShellExecute = false;
StackGrab.Start();
StackGrab.WaitForExit();
コマンドプロンプトでStackGrabber.exeを呼び出してC:\>StackGrabber -s
、「esc」入力が終了するのを待たないようにしたい