c# - 如何从 C# 停止 Python 代码的 Process.Start 进程

标签 c# python process environment-variables exe

在 C# 应用程序中,我运行了 python 控制台应用程序 exe 文件,并通过环境变量路径进行处理:

private void button1_Click(object sender, EventArgs e)
{
    var filePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "folder\\python.exe");   
    Process.Start(filePath); 
}

并且我想停止此过程并通过单击按钮或任何其他条件关闭控制台,不确定我做错了什么:

private void button2_Click(object sender, EventArgs e)
{
    var filePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "folder\\python.exe");
    var process = Process.Start(filePath);
    process.Kill();
}

最佳答案

在第二次单击按钮时,您将启动一个新进程(并立即终止它),而不是停止第一次单击按钮时启动的进程。要停止从第一次单击按钮开始的进程,您需要将创建的 Process 对象存储在变量中,然后调用 Kill() 方法单击第二个按钮时在该对象上。

这是一个非常简单的示例(请注意,每次按下 button1 时,它都会将新创建的进程分配给 runningProcess 变量)

public class FormClass
{
    Process runningProcess;

    public FormClass()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        var filePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "folder\\python.exe");   
        runningProcess = Process.Start(filePath); 
    }

    private void button2_Click(object sender, EventArgs e)
    {
        if(!runningProcess.HasExited)
        {
            runningProcess.Kill();
        }
    }
}

关于c# - 如何从 C# 停止 Python 代码的 Process.Start 进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41128319/

相关文章:

r - 有没有办法将 R 对象传输到 Linux 上的单独 R session ?

c# - Silverlight 中匿名类型的属性反射失败

c# - 拆分字符串时出现混淆错误

python - 实现非阻塞远程日志处理程序

python - 执行 os.walk 时出现 UnicodeDecodeError

linux - kernel_thread()和thread_create(),哪个函数实际上创建了一个新线程?

java - 同时杀死两个进程

c# - 具有动态变量的代码契约(Contract)

c# - 为什么等待任务有时会阻塞?

python - keras save_weights() 函数是否会覆盖以前的权重?