如何在没有表单时检测应用程序关闭(控制台应用程序)

时间:2013-06-05 02:10:22

标签: .net vb.net forms windows-7

我一直想知道这件事。

我目前希望应用程序检测它何时关闭。棘手的是,这个应用程序是一个控制台,意味着没有形式关闭事件或类似的。

我在谷歌上有一个侦察员,但实际上只提出了下面的代码,该代码只检测到关闭,注销而不是专门关闭应用程序。

ShutdownEvents代码:

Imports Microsoft.Win32
Module Module1

Sub Main()
    AddHandler (SystemEvents.SessionEnding), AddressOf ShutDown.OnShuttingdown
    AddHandler (SystemEvents.SessionEnded), AddressOf ShutDown.OnShutdown
    Console.ReadKey()
End Sub

Public Class ShutDown
    Public Shared Sub OnShuttingdown(ByVal sender As Object, ByVal e As SessionEndingEventArgs)
        e.Cancel = True 'only set if you turn down the shutdown request
        Console.WriteLine("Shutting down - Reason is " & e.Reason)
        Console.ReadKey()
    End Sub

    Public Shared Sub OnShutdown(ByVal sender As Object, ByVal e As SessionEndedEventArgs)
        Console.WriteLine("Shutdown - Reason is " & e.Reason)
        Console.ReadKey()
    End Sub
End Class
End Module

任何帮助都将不胜感激。

此致

2 个答案:

答案 0 :(得分:1)

您需要创建一个控制台控制处理程序。在Console类中没有设备可以执行此操作,但您可以调用Windows API函数来执行此操作。 C#中的一个示例位于Detecting Process Exit From Console Application in C#

您需要阅读并理解SetConsoleCtrlHandler API函数。

几年前我写了几篇关于使用C#的Windows Console API的文章。不幸的是,DevSource似乎已经失去了描述这一点的那个。

提供了另外两个

http://www.devsource.com/c/a/Using-VS/Working-with-Console-Screen-Buffers-in-NET/

http://www.devsource.com/c/a/Using-VS/Console-Input-in-NET/

这些文章中提供的代码的完整来源位于http://mischel.com/pubs/consoledotnet.zip

答案 1 :(得分:0)

尝试AppDomain.ProcessExit

的AddHandler

e.g。通过Thread.GetDomain