首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >System.Diagnostics.Process

System.Diagnostics.Process
EN

Stack Overflow用户
提问于 2013-06-20 03:00:53
回答 2查看 1.1K关注 0票数 0

我有.NET窗口窗体和按钮。当点击按钮时,我启动了bat文件:

代码语言:javascript
复制
        //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窗体停止该进程?

谢谢

EN

回答 2

Stack Overflow用户

发布于 2013-06-20 03:04:23

试一试

代码语言:javascript
复制
this.Focus(); 

之后

代码语言:javascript
复制
 proc.Start();
票数 0
EN

Stack Overflow用户

发布于 2013-06-20 03:09:29

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

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

代码语言:javascript
复制
if(!proc.HasExited)
{
    proc.Kill();
    proc.WaitForExit();
}
proc.Dispose();
proc = null;

请注意,根据bat文件所做的工作,以这种方式关闭进程可能会对计算机的稳定性造成危险。

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

代码语言:javascript
复制
    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();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17199198

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档