让一个无格式的C#程序在关机/重启时自动关闭?

让一个无格式的C#程序在关机/重启时自动关闭?,c#,events,shutdown,C#,Events,Shutdown,我正在写一个程序,它在需要表单之前根本不创建表单。问题是,它阻止了关机自动继续。我已经看到过添加一个if来形成关闭事件,以检查它是否是由于关闭引起的,但是正如我所说的,我的程序在需要之前根本没有表单 是否有任何事件或其他方法可以让我知道我的程序何时应该自动关闭,以允许Windows自动关闭 您始终可以添加一个虚拟窗体,该窗体可以最小化打开,任务栏上没有图标-它不会产生任何视觉影响,但会发送窗体关闭事件-您可以在其中记录关闭事件,并且可能会关闭/停止应用程序正在执行的任何其他操作。您始终可以添加一

我正在写一个程序,它在需要表单之前根本不创建表单。问题是,它阻止了关机自动继续。我已经看到过添加一个
if
来形成关闭事件,以检查它是否是由于关闭引起的,但是正如我所说的,我的程序在需要之前根本没有表单


是否有任何事件或其他方法可以让我知道我的程序何时应该自动关闭,以允许Windows自动关闭

您始终可以添加一个虚拟窗体,该窗体可以最小化打开,任务栏上没有图标-它不会产生任何视觉影响,但会发送窗体关闭事件-您可以在其中记录关闭事件,并且可能会关闭/停止应用程序正在执行的任何其他操作。

您始终可以添加一个虚拟窗体,最小化打开,任务栏上没有图标-它不会产生任何视觉影响,但会发送窗体关闭事件-您可以在其中注意到关闭事件,并可能关闭/停止应用程序正在执行的任何其他操作。

您可以使用该类“侦听”用户注销或关闭

如果我正确理解了文档(与Reflector的深入研究证实了这一点):

  • systemevents将生成一个从windows接收消息的新线程(它有自己的messagepump)
  • 当收到事件时,将从新线程调用代码。你应该意识到这一点
您可以使用该类“侦听”用户注销或关闭

如果我正确理解了文档(与Reflector的深入研究证实了这一点):

  • systemevents将生成一个从windows接收消息的新线程(它有自己的messagepump)
  • 当收到事件时,将从新线程调用代码。你应该意识到这一点

处理
Microsoft.Win32.SystemEvents.sessionding
事件,并使用
System.Environment.hashutdownstarted
处理
Microsoft.Win32.SystemEvents.sessionding
事件检查是否为实际关机,然后用
System.Environment.hashutdownstarted

检查是否是实际关机。从外观上看,您仍然需要打开一个隐藏表单(或手动启动消息泵)才能正常工作。@a2h-可能是这样,但请参阅本页的示例2。现在,它谈论的是windows服务。但唯一的另一个例子是表单应用程序,它打开了一个表单。而且(从一些老式的windows编程中),知道这些事件是通过windows消息传递的,这并不完全出乎意料。事实上,我的错误是——看起来SystemEvents会创建一个虚拟消息泵,如果可以的话,所以可能没问题(但它不能在服务中这样做)。@Damien也在看同样的事情。更新了我的答案。从外观上看,您仍然需要打开一个隐藏表单(或手动启动消息泵)才能使其正常工作。@a2h-可能是这样,但请参阅本页的示例2。现在,它谈论的是windows服务。但唯一的另一个例子是表单应用程序,它打开了一个表单。而且(从一些老式的windows编程中),知道这些事件是通过windows消息传递的,这并不完全出乎意料。事实上,我的错误是——看起来SystemEvents会创建一个虚拟消息泵,如果可以的话,所以可能没问题(但它不能在服务中这样做)。@Damien也在看同样的事情。更新了我的答案。