【问题标题】:How can I call a method when a console application has been closed?控制台应用程序关闭时如何调用方法?
【发布时间】:2019-01-18 19:04:02
【问题描述】:

我在这里阅读了数十个现有问题,他们都提出了相同的解决方案,不幸的是这些都不起作用。似乎它们仅在单击控制台应用程序上的 X 按钮时才起作用。

我在问,当控制台被强制关闭时,有没有办法运行一些代码?这意味着在任务管理器中强制关闭任务,或者操作系统出于任何原因强制关闭它。

我已经尝试了几乎所有关于本网站未解决问题的现有解决方案。这不是重复的。我再说一遍,这不是重复的。它只是要求完全不同的东西。

到目前为止,我尝试过什么吗?不,我已经尝试了所有通常的方法,为各种事件分配回调函数,但实际上没有任何效果。我以前在 WinForm 中这样做过,但不能在控制台中。

【问题讨论】:

  • 我认为这不是直接可能的,但也许你可以有一个单独的后台应用程序 B 来监控你的应用程序 A 和如果 A 被强制关闭,然后应用 B 调用您的方法。但如果后台应用程序(即 B 也被强制关闭,您可以从 A 重新生成它。
  • B 如何知道 A 是否被强制关闭,而不仅仅是使用 X 软关闭?我也不喜欢 A 必须依赖另一个应用程序 B。
  • @fskdjwe 我自己没有这样做,但是当我想强制关闭一个应用程序时,我有经验,它会自行恢复。必须有另一个应用程序或服务来执行此操作,以便它们可以相互保护。
  • 您可以使用句柄创建事件。请参阅 Pinvoke:pinvoke.net/default.aspx/kernel32/CreateEvent.html

标签: c# .net


【解决方案1】:

您可能正在寻找应用程序恢复和重新启动。 应用程序恢复和重启 (ARR) 技术使开发人员能够在 WER 由于不可恢复的错误而终止应用程序时自定义应用程序的行为。

参考:https://msdn.microsoft.com/en-us/library/cc303699.aspx

-- 或者更通用、更可靠的修复方法--

第一个应用程序可以启动第二个应用程序(如果尚未在后台运行)。您可以使用第二个应用程序(作为后台服务运行)来“监视”第一个可以在关闭时再次启动它的应用程序。您也可以根据第一个应用程序的干净退出来修改行为。启动该过程的非常简单的方法是:

    // Wait for the process to terminate
    Process process = null;
    try
    {
        process = Process.GetProcessById(pid);
        process.WaitForExit(1000);
    }
    catch (Exception ex)
    {
        // Handle appropriately
    }
    Process.Start(applicationName, "");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多