【问题标题】:how to run code on program process end如何在程序进程端运行代码
【发布时间】:2012-12-06 17:50:00
【问题描述】:

我正在使用 VS 2010,winForm。

有人可以建议程序过程结束时如何运行方法吗?

我试过了:How to run code before program exit? 解决方案,但如果我在任务管理器中结束进程它没有被调用,它只能通过“关闭按钮”关闭表单,是否可以处理此类事件?

static void Main()
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    Application.Run(new MainForm());
    AppDomain.CurrentDomain.ProcessExit += new EventHandler (OnProcessExit); 
}

public static void OnProcessExit(object sender, EventArgs e)
{
    if (Utils.RemindTime != DateTime.MinValue)
        Utils.SetStartup(true);
}

【问题讨论】:

  • 如果你杀了进程,你就杀了进程。没有任何东西可以执行任何任务。
  • 请参阅this question 以获得详细答案。简而言之:这是做不到的
  • 你能把代码直接放在Application.Run 行下面,而不是设置事件处理程序吗?如果这不起作用,请尝试将事件处理程序代码放在 Application.Run 之前。
  • @Matthew 这只在进程被很好地拆除时才有效,而不是当它被操作系统强行杀死时。

标签: c# process


【解决方案1】:

您使用另一个程序来启动该程序。 假设您的应用程序是“记事本”:

class Program
{
    static void Main(string[] args)
    {
        var startInfo = new ProcessStartInfo("notepad.exe");
        var process = Process.Start(startInfo);
        process.WaitForExit();
        //Do whatever you need to do here
        Console.Write("Notepad Closed");
        Console.ReadLine();
    }
}

您可以在 Windows 上使用类似的批处理文件 或 Linux 中的 shell 脚本。

当然,它不会让您访问您启动的程序的内部, 但这是确保在任务管理器终止进程后执行“某些代码”的唯一方法

【讨论】:

  • 我明白了,谢谢帮助,也许我应该想出一些不同的东西:)))
  • 当然,如果有人没有在“记事本”之前杀死这个进程
  • 我不确定你到底想做什么,但也许在某一时刻你想弄清楚你的应用程序是正确关闭还是错误关闭(通过杀死它)。您所做的是在应用程序启动时创建一个文件,并在应用程序正确关闭时删除该文件。在上面的示例中,您检查该文件是否存在,如果存在,则应用程序被杀死,如果不存在,则应用程序被正确关闭
  • @L.B.确实 :p 总有办法绕过它 :p 所以还需要有基本的安全措施。再说一次,对机器的物理访问=完全访问。该死,可以在用户甚至不知道的情况下实时修改内存中的应用程序......但是+1,因为它是真实的 100%
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-02-22
  • 1970-01-01
  • 2018-12-08
  • 1970-01-01
  • 1970-01-01
  • 2012-09-12
  • 2017-02-17
相关资源
最近更新 更多