gpt4 book ai didi

c#无法终止进程

转载 作者:行者123 更新时间:2023-11-30 17:38:55 24 4
gpt4 key购买 nike

基本上,我正在尝试制作一个能够启动和关闭 .bat 文件的程序。我已经设法让它启动 bat 文件,但是我无法弄清楚如何让它关闭 .bat 文件。

这是类代码:

using System;
using System.Diagnostics;
using System.Threading;
using System.ComponentModel;

namespace Launcher
{
class MyProcess
{
public static void LaunchProcess()
{
Process myProcess = new Process();
try
{
myProcess.StartInfo.UseShellExecute = false;
myProcess.StartInfo.FileName = "C:\example.bat";
myProcess.StartInfo.CreateNoWindow = true;
myProcess.Start();
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
}
}

我知道要终止进程,我必须使用 myProcess.Kill(); 但是我不确定如何将它添加到代码中,就好像我要重新调用'launchprocess' 然后 myProcess 将被覆盖

最佳答案

您的代码使用局部变量来存储流程信息,并且不会将其保存以供后续操作使用。如果您想将其保留为静态方法,则返回 Process 作为结果:

public static class MyProcess
{
public static void LaunchProcess()
{
Process myProcess = new Process();
try
{
myProcess.StartInfo.UseShellExecute = false;
myProcess.StartInfo.FileName = "C:\example.bat";
myProcess.StartInfo.CreateNoWindow = true;
myProcess.Start();
return myProcess;
}
catch (Exception e)
{
myProcess.Dispose();
Console.WriteLine(e.Message);
}
}
}

现在您有一个代表新进程的 Process 对象,如果您需要摆脱它,可以调用它的 Kill 方法。

另一种方法是将其更改为非静态的,并让类实例在请求时终止进程。根据您正在做的事情,实现 IDisposable 可能是有意义的:

public class MyProcess : IDisposable
{
private Process myProcess = null;

~MyProcess()
{
Dispose(false);
}

public void Dispose(bool dispose)
{
Dispose();
}

public void Dispose()
{
if (myProcess != null)
{
if (!myProcess.HasExited)
myProcess.Kill();
myProcess.Dispose();
myProcess = null;
}
}

public bool LaunchProcess()
{
try
{
myProcess = new Process();
myProcess.StartInfo.UseShellExecute = false;
myProcess.StartInfo.FileName = "C:\example.bat";
myProcess.StartInfo.CreateNoWindow = true;
myProcess.Start();
return true;
}
catch (Exception e)
{
myProcess.Dispose();
Console.WriteLine(e.Message);
}
return false;
}
}

这应该确保该过程不会比您自己的程序长寿。

关于c#无法终止进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36231885/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com