C# 在系统关闭前执行程序

C# 在系统关闭前执行程序,c#,windows,shutdown,C#,Windows,Shutdown,我有一个程序需要在系统关闭前运行。这意味着,在任何程序因关机而终止之前,我需要执行上述程序,最好是通过Process.Start() 起初,我尝试在Windows关机脚本中执行上述程序,但该脚本仅在程序已终止后执行。但是,我需要以正确的顺序终止一些正在运行的应用程序 我尝试了事件SystemEvents.SessionEnding和SessionEnded,但此事件不允许您等待超过1-2秒,并且也无法取消关机 在关于关机的WndProc事件中,我执行了一个进程。我到达了事件,我到达了可以暂停关闭

我有一个程序需要在系统关闭前运行。这意味着,在任何程序因关机而终止之前,我需要执行上述程序,最好是通过Process.Start()

起初,我尝试在Windows关机脚本中执行上述程序,但该脚本仅在程序已终止后执行。但是,我需要以正确的顺序终止一些正在运行的应用程序

我尝试了事件SystemEvents.SessionEnding和SessionEnded,但此事件不允许您等待超过1-2秒,并且也无法取消关机

在关于关机的WndProc事件中,我执行了一个进程。我到达了事件,我到达了可以暂停关闭过程的点。但是,当我尝试实际调用一个进程时,会出现“0xC0000142”错误。 对此进行搜索会导致一个选项,即用户不正确,但是我想用运行执行程序的用户调用此应用程序。另一种选择是环境路径错误。我为第二个选项设置了一个环境路径,但在我看来,我不需要为第一个选项更改任何内容,因为我想用当前用户执行它

我考虑的第三种可能性可能是,在系统关闭的这种状态下,无法生成新进程

我能做些什么来修复这个问题并在这里实际执行程序?在这一点上,我似乎有些不知所措

澄清: “清理”程序需要按给定顺序关闭程序。要关闭的程序是我们自己的,但是Windows窗体(我能看到的唯一可以使用关闭处理程序的方法)不能在那里使用。
程序A是处理OnShutdown的程序。关闭时,程序A将调用程序B,程序B执行程序的有序关闭。在我的解决方案中,程序B(包括表单)无法启动并返回错误,如第4段所述。这里唯一的用户交互是用户按下电源按钮导致系统关闭,或远程执行“shutdown.exe”调用。

您要执行的是您自己的工具还是第三方软件?如果是您自己的,您可以创建一个在关闭事件上触发的处理程序。在这种情况下,您还必须让您的工具从一开始就运行。我正在使用一个用户必须注销的软件。如果关闭,关闭事件将触发自动注销。如果您使用的是windows:WIN+R->gpedit.msc->Userconfig->Scripts。不是以编程方式,但可能有用。关闭时脚本不起作用,因为它在执行脚本之前已经以准随机顺序关闭了所有应用程序,这导致了我的代码想要避免的问题。对于第一个回复,我在帖子中添加了一个澄清,我希望澄清能够回答这个问题。没有用户交互,但从一开始运行的工具就是我计划的。自动注销不是问题,如果注销发生,我需要执行不同的程序。与其尝试启动单独的“清理程序”,您可能应该独立检测每个应用程序中的初始关闭,并让它们以正确的顺序自行关闭。对于什么类型的应用程序可以执行此检测没有限制,如果您不知道如何为其中一些应用程序执行此检测,这将是一个单独的问题。(顺便说一句,我相信您的想法是正确的,即一旦关闭达到某一点,您可能无法启动新流程,这就是0xC0000142错误的原因。)