プロセス呼び出し待ちおよびプロセス終了モニタソース
2525 ワード
public partial class FormMain : Form
{
public FormMain()
{
InitializeComponent();
}
/// <summary>
///
/// </summary>
/// <param name="appPath"> </param>
/// <param name="args"> </param>
public void RunAppAndWait(string appPath, string args)
{
System.Diagnostics.ProcessStartInfo Info = new System.Diagnostics.ProcessStartInfo();
//
Info.FileName = appPath;
Info.Arguments = args;
//
System.Diagnostics.Process Proc;
try
{
this.Hide();
Proc = System.Diagnostics.Process.Start(Info);
Proc.WaitForExit();
}
catch (System.ComponentModel.Win32Exception)
{
this.Show();
return;
}
this.Show();
}
private void btnRunProcess_Click(object sender, EventArgs e)
{
RunAppAndWait(txtApp.Text, txtArgs.Text);
}
private void FormMain_Load(object sender, EventArgs e)
{
txtApp.Text = Application.StartupPath + "\\app.exe";
txtArgs.Text = " abc";
}
private void btnStart_Click(object sender, EventArgs e)
{
System.Diagnostics.Process[] procs = System.Diagnostics.Process.GetProcessesByName(txtProcess.Text);
if (procs.Length > 0)
{
foreach (System.Diagnostics.Process item in procs)
{
item.EnableRaisingEvents = true;
item.Exited += new EventHandler(item_Exited);
}
}
}
public delegate void MyInvoke(string str);
private void SetText(string s)
{
if (txtStatus.InvokeRequired)
{
MyInvoke _myInvoke = new MyInvoke(SetText);
this.Invoke(_myInvoke, new object[] { s });
}
else
{
this.txtStatus.AppendText(s);
}
}
void item_Exited(object sender, EventArgs e)
{
var p = sender as System.Diagnostics.Process;
SetText(p.ProcessName + " ");
}
}