【问题标题】:System.Diagnostics.ProcessSystem.Diagnostics.Process
【发布时间】:2013-06-16 10:58:38
【问题描述】:

我有 .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 窗体停止该进程?

谢谢

【问题讨论】:

  • 你将不得不摆脱 WaitForExit()。请改用 Process.Exited 事件。

标签: winforms system.diagnostics


【解决方案1】:

试试

this.Focus(); 

之后

 proc.Start();

【讨论】:

  • 嗯,问题不是很清楚,你需要把焦点放在表单上才能点击STOP按钮,还是需要创建一个停止按钮?
【解决方案2】:

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

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

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

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

对于焦点问题,鉴于这是一个批处理文件,您可以使用 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();

【讨论】:

    猜你喜欢
    • 2019-01-15
    • 2013-08-28
    • 2011-02-05
    • 1970-01-01
    • 2014-01-22
    • 1970-01-01
    • 2016-05-13
    • 2011-01-15
    • 1970-01-01
    相关资源
    最近更新 更多