0

我有 .NET windows 窗体和按钮。单击按钮时,我启动 bat 文件:

        //execute batch
        System.Diagnostics.Process proc = new System.Diagnostics.Process();
        proc.StartInfo.FileName = "test.bat";
        proc.StartInfo.WorkingDirectory = Path.GetDirectoryName(path);
        proc.Start();
        proc.WaitForExit();

我希望能够再次单击按钮并停止执行 bat。现在 Windows 窗体失去焦点,我无法单击按钮。如何从 Windows 窗体停止进程?

谢谢

4

2 回答 2

0

尝试

this.Focus(); 

 proc.Start();
于 2013-06-19T19:04:22.867 回答
0

不能更精确,因为我需要知道蝙蝠内部正在运行什么,但您可能可以使用 Process.Kill 方法。

为了能够使用它,您应该在 Start 之后删除 WaitForExit 并将 proc 变量保存为表单级变量。然后,当您需要关闭该过程时,您可以尝试使用

if(!proc.HasExited)
{
    proc.Kill();
    proc.WaitForExit();
}
proc.Dispose();
proc = null;

请注意,以这种方式关闭进程可能会对计算机的稳定性造成危险,具体取决于 bat 文件正在执行的操作......

对于 Focus 问题,鉴于这是一个批处理文件,您可以使用 CreateNoWindow 选项来阻止窗口出现

    System.Diagnostics.Process proc = new System.Diagnostics.Process();
    proc.StartInfo.FileName = "cmd.exe";
    proc.StartInfo.Arguments = "/C test.bat";
    proc.StartInfo.WorkingDirectory = @"c:\temp";
    proc.StartInfo.CreateNoWindow = true;
    proc.StartInfo.UseShellExecute = false;
    proc.Start();
于 2013-06-19T19:09:29.067 回答