我已经在C#应用程序中通过以下按钮单击事件启动了一个过程,
System.Diagnostics.Process process = new System.Diagnostics.Process();
private void btnOpenPort_Click(object sender, RoutedEventArgs e)
{
System.Diagnostics.ProcessStartInfo startInfo = new
System.Diagnostics.ProcessStartInfo();
startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
startInfo.FileName = "http-server";
// startInfo.Arguments = "/C http-server -p 8765";
this.process.StartInfo = startInfo;
this.process.Start();
}
现在,我想在应用程序窗口关闭时停止此命令行过程。就像我在“命令提示符”中编写命令一样,我通常会按 Ctrl + C 来停止执行。
编辑:我有此事件,单击关闭按钮时会触发。
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
Int32 result = DllWrapper.HdsDestroy();
MessageBox.Show("Destroy result = " + (result == 0 ? "Success" : "Fail"));
}
我在Internet上找到了一个解决方案,SendKeys,但我听不懂。 PS:这可能是某些问题的重复,但有些问题对我不起作用。
先谢谢您
答案 0 :(得分:2)
感谢@mjwills指导我。
后来,我发现 FirefoxOptions options=new FirefoxOptions();
options.setProfile(profile);
WebDriver dd=new FirefoxDriver(options);
在这种情况下启动了两个不同的过程。一个是 cmd.exe ,另一个是 node.exe 。
process.Start()
仅杀死 cmd.exe 。因此,我发现必须找到 node.exe 进程并将其杀死。
我有两种解决方法:
1。。这可能会停止所有名为 node.exe 的进程,但现在对我有用。
process.Kill()
2。。正如我在问题中提到的,请使用foreach(var node in Process.GetProcessesByName("node"))
{
node.Kill();
}
。
SendKeys.SendWait("^(C)");
导入此dll文件以在前台获取命令行窗口。然后我像这样修改了“关闭”按钮事件。
[DllImport("User32.dll")]
static extern int SetForegroundWindow(IntPtr point);
答案 1 :(得分:1)
致电process.Kill();
method,这将停止关联的进程。
答案 2 :(得分:-1)
将此行添加到Form的构造函数中:
Application.ApplicationExit += (s, ev) => process.Kill();
编辑
使用此代码:
if (process.MainWindowHandle != IntPtr.Zero)
process.CloseMainWindow(); // this Closes process by sending a close message to its main window.
else
process.Kill(); // this kills Hidden window
process.Close(); // Frees all resources that are associated with process.
答案 3 :(得分:-2)
处理应用程序退出事件并在此事件处理程序中关闭进程。
public static event EventHandler ApplicationExit
示例:
// Attache Handler to the ApplicationExit event.
Application.ApplicationExit += new EventHandler(this.OnApplicationExit);
处理程序:
private void OnApplicationExit(object sender, EventArgs e) {
try {
// Ignore any errors that might occur while closing the file handle.
process.Kill();
}
catch {}
}