【问题标题】:How to inform C# code when executable created using PyInstaller exits?当使用 PyInstaller 创建的可执行文件退出时如何通知 C# 代码?
【发布时间】:2016-01-13 18:24:52
【问题描述】:

类似的问题已在 linux 上得到解答,但我在 windows 上找不到。 我有一个 Python 脚本如下:

import sys
import os

#do something

# sys.exit(0) used this one, as well
os._exit(0)

我使用 PyInstaller 将其转换为 Windows 可执行文件。 而C#代码是:

var process = new System.Diagnostics.Process();
process.StartInfo = new System.Diagnostics.ProcessStartInfo(path, "Long Argument");
process.Exited += (s, e) => { Console.WriteLine("Process Finished"); }; ;
process.Start();
process.WaitForExit();

进程启动并正确运行。但是当它退出 Exited 时,不会引发事件。 我也不确定我在哪方面做错了,C# 还是 python。

【问题讨论】:

  • 你真的有退出事件吗? Process.Exited Event MSDN
  • @MethodMan 你的答案是正确的。解决了。 EnableRaisingEvents 应该是真的。您可以将其发布为答案,我接受。也许其他人会像我一样犯同样的错误。
  • 很高兴我能够快速帮助您。如果有机会,请随时接受
  • @MethodMan 我做了=) 我和你一样快,但我看到你的评论晚了。
  • 不是问题@ozgur 很高兴我能帮助你.. 有美好的一天.. 干杯..!

标签: c# python windows process


【解决方案1】:

你需要有一个 Process.Exited 的事件在这里解释 Process.Exited Event

根据您缺少的示例的此编码部分,EnableRaisingEvents 应设置为 true

private Process myProcess = new Process();
private int elapsedTime;
private bool eventHandled;

// Print a file with any known extension.
public void PrintDoc(string fileName)
{

    elapsedTime = 0;
    eventHandled = false;

    try
    {
        // Start a process to print a file and raise an event when done.
        myProcess.StartInfo.FileName = fileName;
        myProcess.StartInfo.Verb = "Print";
        myProcess.StartInfo.CreateNoWindow = true;
        myProcess.EnableRaisingEvents = true;
        myProcess.Exited += new EventHandler(myProcess_Exited);
        myProcess.Start();

    }
    catch (Exception ex)
    {
        Console.WriteLine("An error occurred trying to print \"{0}\":" + "\n" + ex.Message, fileName);
        return;
    }

    // Wait for Exited event, but not more than 30 seconds.
    const int SLEEP_AMOUNT = 100;
    while (!eventHandled)
    {
        elapsedTime += SLEEP_AMOUNT;
        if (elapsedTime > 30000)
        {
            break;
        }
        Thread.Sleep(SLEEP_AMOUNT);
    }
}

【讨论】:

    猜你喜欢
    • 2016-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-24
    • 1970-01-01
    • 2018-07-15
    相关资源
    最近更新 更多