问题标签 [system-shutdown]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2949 浏览

winapi - 如何以编程方式中止 Windows (XP|Vista) 中的关机?

我希望能够 1. 从我的应用程序中检测(并且,如果需要 2. 中止)操作系统关闭,最好使用 Windows API。

我知道可以使用命令手动中止关机shutdown -a在最坏的情况下,我可以 ShellExecute 这个,但我想知道是否有更好的方法来以编程方式防止关机。

也许以编程方式通知操作系统即将关闭就足够了 - 如何做到这一点?

0 投票
1 回答
487 浏览

c# - 在系统关闭时从 Windows 服务调用 Windows 应用程序

我正在用 C# 在 .Net 3.5 中开发 Windows 服务。此服务用于定期调用 Windows 窗体。现在我想将一个事件与服务挂钩,这样当用户尝试关闭系统时,也会出现 windows 窗体,从而阻止关闭过程。用户只能通过 Windows 应用程序关闭系统。

有没有办法在 Windows 服务中做到这一点?

编辑

我希望这仅在Win 2000 和 Win XP中完成。

谢谢

0 投票
4 回答
2508 浏览

c# - .NET Windows 服务在系统关闭期间中止

我的 Windows 服务是具有大量缓存的数据服务器。在服务 OnStop 期间,我保存了缓存,这样就不会丢失任何数据。保存缓存可能需要几分钟,所以为了防止 Windows 服务管理器超时,我使用 SetServiceStatus Win32 回调:

这很好用。

我还将 CanShutdown 设置为 true 并添加了 OnShutdown 以便该服务可以防止系统关闭。在这里,我有效地做与 OnStop 相同的事情:

这不太好。当系统关闭时,当缓存被保存时,我得到“设备未准备好”。这表明 Windows 在停止/关闭之前中止服务。用 SetServiceStatus 来防止这种情况显然是行不通的。

如何获得更多时间(延迟重启)来完成保存?

欢迎任何建议。

0 投票
1 回答
4861 浏览

delphi - 如何关闭 Windows?

如何在 Delphi 应用程序(7,试图将其移植到 2010)中强制系统(XP 或 7)关闭?

0 投票
1 回答
196 浏览

windows - Programmatically power off the machine by Machine name?

I want to write the utility which will be scheduled task, and will take the list of computer names on domain. After a particular time which will be set in the utility machines with that name get shutdown.

Please share your thoughts on this...

Thanks. Anjan

0 投票
2 回答
421 浏览

c# - 在 WindowsME 上处理用户注销或机器关闭请求

我必须编写一个在 WindowsME 上运行的 C# 应用程序。是的,我的意思是很久以前就被遗忘的微软操作系统。我的程序不需要用户交互,并且由于 WindowsME 不支持服务,它将是一个控制台应用程序。此外,它将在更现代的操作系统上使用,用户可以选择是将其作为控制台应用程序启动还是作为 Windows 服务安装。现在假设该软件正在 WinME 上运行,并且用户决定注销或关闭机器而无需事先退出我的软件。WinME 抱怨我的程序仍在运行,并询问它是否应该终止该进程。除了糟糕的用户体验外,这意味着应用程序没有正确关闭。

因此,我寻找一种方法来通知用户是否注销或想要关闭机器,以便能够首先正确关闭我的软件。

0 投票
1 回答
1472 浏览

c# - Windows NT 服务关闭问题

我开发了中间件,为我们组织内多个平台上的多个客户端应用程序提供 RPC 功能。中间件是用 C# 编写的,并作为 Windows NT 服务运行。它处理诸如对网络共享的文件访问、数据库访问等事情。中间件托管在两个运行 Windows Server 2008 的高端系统上。

当我们的一位服务器管理员重新启动机器时,主要是为了进行 Windows 更新,系统在我的 NT 服务方面的行为存在严重问题。我的服务旨在立即停止侦听新连接,立即开始拒绝现有连接上的新请求,否则在 SCM 发出 OnStop 或 OnShutdown 请求的情况下尽快关闭。尽管如此,为了保持系统完整性,当前正在进行的操作仍可继续进行一段合理的时间。通常服务器会在 30 秒内关闭(例如手动停止服务时)。但是,当系统被指示重新启动时,我的服务立即失去对网络驱动器和 UNC 路径的访问权限,导致任何打开的文件和对这些位置的部分写入的数据完整性问题。我的服务确实将 Workstation(以及因此 SMB Redirector)列为依赖项,因此我认为如果 Windows 尊重这些依赖项,则需要在停止 Workstation/Redirector 之前停止我的服务。

基本上,我的应用程序被迫崩溃和烧毁,远程过程调用失败,并最终在超时时间过后(似乎大约为 20-30 秒)被操作系统强制终止。

与 Windows 应用程序不同,我的 Windows NT 服务似乎没有任何能力来停止正在进行的系统关闭、延迟系统关闭,甚至没有机会在被强制断开连接和关闭之前保存任何挂起的网络共享磁盘写入. NT 服务开发人员应该如何在这种环境中拥有任何类型的应用程序完整性?为什么表单应用程序在关闭之前获得了所有完成业务的机会,而服务似乎没有这样的好处?

我试过了:

通过 p/invoke 调用 SetProcessShutdownParameters 以尝试尽快通知我的应用程序关闭,以避免重定向器在我之前关闭。

使用小于或等于两分钟限制的值调用 ServiceBase.RequestAdditionalTime。

调整 WaitToKillServiceTimeout

我能想到的一切都能让我的服务更快地关闭。

但最后,我仍然有大约 30 秒的问题时间,我的服务似乎还没有收到 OnShutdown 事件的通知,但由于重定向器不再为我的网络共享请求提供服务,请求失败。

这个问题打算如何解决?我可以做些什么来延迟或停止关闭,或者至少允许关闭我的活动任务而不会从我下面消失重定向器服务?我可以理解微软试图做些什么来防止服务拖拖拉拉并显示关闭,但这似乎是 Windows 客户端操作系统的一个伟大目标,而不是服务器。我不希望我的服务器快速关闭,我希望操作完整性和正常关闭。

提前感谢您提供的任何帮助。

更新:我已经完成了确切的时间安排。在测试关机中,我在 23:55:58 收到关机通知,并注意到在 23:56:02 失去了网络共享连接。所以在四秒钟之内,我就失去了保存任何活动状态的能力。

0 投票
6 回答
6815 浏览

c# - 如何从 Windows 服务 C# 取消关闭

我启动了一个 Windows 服务(用 C# .net2.0 编写)。

我想检测计算机何时关闭/重新启动并取消它。取消后我想做一些操作并重新启动窗口。

我试过了,但它不起作用

另一个测试:

0 投票
9 回答
22223 浏览

c - 如何在 Linux 上检测挂起的系统关闭?

我正在开发一个需要检测系统关闭的应用程序。但是,我还没有找到任何可靠的方法来获取有关此事件的通知。

我知道在关机时,我的应用程序会收到一个SIGTERM信号,然后是SIGKILL. 我想知道是否有任何方法可以查询 aSIGTERM是否是关机序列的一部分

有谁知道是否有办法以编程方式查询(C API)?

据我所知,系统没有提供任何其他方法来查询即将关闭的情况。如果是这样,那也可以解决我的问题。我也一直在尝试runlevels,但变化runlevels似乎是瞬间的,没有任何事先警告。

0 投票
2 回答
1165 浏览

c# - 当用户注销或关闭 Windows 时,如何延迟关闭应用程序?

我正在编写一个从启动到关闭在后台运行的应用程序,在某些情况下,我需要应用程序显示一个对话框供用户选择是否继续关闭。此应用程序只能在 Windows 上运行,但可以在 2000 以后的任何版本上运行。

虽然我确实对该主题进行了一些研究,但有关 Windows 处理应用程序关闭方式的信息(http://msdn.microsoft.com/en-us/library/ms700677(VS.85).aspx)似乎有点分散。如果有人有处理此问题的最佳方法的示例,或有关该主题的其他知识,我将非常感激(我对 C# 的经验很少)。

谢谢!!

坏熊猫

编辑:我知道阻止关机不被认为是好的做法。这是此应用程序的关键业务需求。

编辑:根据下面几位评论员的建议(重新设计以便不需要阻止关闭),我使用了 NotifyIcon Balloon 弹出窗口来通知用户在应用程序发送数据时不要关闭。虽然这不太可能阻止数据在本地计算机上保留数周,但我认为这是最佳实践和业务需求之间的良好折衷。毕竟,如果用户会变得愚蠢……那么,用户就会变得愚蠢。