我可以让我的服务阻止 Windows 进入睡眠状态吗?

jos*_*ley 6 .net windows-services

我有一个需要在 24 小时后运行的 PC 上运行的 Windows 服务。

我不能依赖禁用睡眠/关机的 PC,因为它安装在大约 3500 个站点上,而 X、Y 或 Z 可能意味着未禁用睡眠/关机。

是否有一些简洁的 .NET 方法可以防止 Windows 打盹?

或者定期写入文件(比如每分钟写入一次日期)就足够了吗?

请不要横向/不良做法警告“你不应该强迫那种事情,把它留给计算机”答案。我的工作是确保该程序在客户的计算机上实现这一目标!

干杯!

编辑:

[大叹]

像往常一样,旁观者忍不住评论。我确实试图劝阻以避免不得不拼出自己的理由,但是嘿。它没有用。人们认为我试图接管“THEIR”计算机。

它适用于企业客户,它监控安全硬件上的操作并记录下来。就像有人用电子钥匙开门一样。

由于门需要一天 24 小时运行,他们显然希望一天 24 小时都在记录。

这不是犯罪。他们有很多网站,他们希望这种情况发生。他们不能依赖那里的工作人员关闭休眠/睡眠功能。所以他们让我确保它可以活着。

再说一遍,这真的不是犯罪。有时,这些事情必须发生。

我讨厌必须证明我在这里提出的每个问题都是合理的。现实世界并不像我们希望的那样整洁和蓬松。

从更积极的方面来说,非常感谢那些提供帮助的人!!

Mik*_*scu 4

就在这里!其他应用程序正在执行此操作(例如,请参阅 Cyber​​link 的 Power DVD),因此 API 就在那里。

我建议您开始阅读有关Windows 电源管理 API 的. 但是,您可能必须求助于 P\Invoke,因为我认为 .NET 没有为这些 API 提供托管实现。

特别是,似乎有一个功能可以注册您的服务以获取电源状态更改的通知:RegisterPowerSettingNotification。我假设您的服务可能有一种方法来请求取消某些电源状态更改(例如进入睡眠状态)。

那么您还应该看看这些电源管理功能

而且,作为最后的手段(尽管如此,也是一种黑客手段),您可以让您的服务定期生成按键并将其发送到系统以模拟用户活动。

** 笔记 **

经过更多思考后,我想指出,我将采取的方法是在 Windows 中创建一个电源管理配置文件,将计算机配置为永不进入睡眠或休眠状态。然后,从您的应用程序/服务中监视活动电源状态配置文件(使用上面的 API),如果它发生变化,则以编程方式将其更改回来。这应该是执行政策的一种非常干净的方式。请参阅PowerSetActiveScheme