我有一个需要在24小时内保留的PC上运行的Windows服务。
我不能依赖禁用睡眠/关机的电脑,因为它是在3500个站点上安装的东西,而X,Y或Z可能意味着睡眠/关闭没有被禁用。
是否有一些简洁的.NET方法可以阻止Windows打盹?
或者定期写文件(比如每分钟写一次日期)就足够了吗?
请不要横向/不良做法警告“你不应该强迫那种东西,把它留给电脑”答案。这是我的工作,以确保该程序在客户的计算机上实现这一目标!
干杯!
修改
[大叹]
像往常一样,侧面人士不禁发表评论。我确实试图劝阻以避免拼错我自己,但嘿。它没用。人们以为我正试图接管“他们的”电脑。它适用于企业客户,它监控安全硬件上的操作并记录它。就像有人用电子钥匙打开门一样。
由于门需要每天24小时运转,他们显然希望每天24小时记录。
这不是犯罪。他们有很多网站,他们希望这种情况发生。他们不能依靠那里的工作人员关闭休眠/睡眠功能。所以他们让我确保它可以活着。
同样,这真的不是犯罪。有时这些事情必须发生。
我讨厌在这里问我要问的每一个问题。现实世界并不像我们所希望的那样整洁和蓬松。
更积极的一点,非常感谢那些帮助过的人!
答案 0 :(得分:3)
是的,有!其他应用程序正在这样做(例如参见Cyberlink的Power DVD),因此API就在那里。
我建议你开始阅读Windows Power Management API's。但是,您可能不得不求助于P \ Invoke,因为我认为.NET不为这些API提供托管实现。
特别是,似乎有一项功能可以为电源状态更改通知注册您的服务:RegisterPowerSettingNotification。我假设您的服务可能有一种方法可以请求取消某些电源状态更改(例如进入睡眠状态)。
然后你还应该看看这些Power Management Functions。
而且,作为最后的手段 - 尽管如此,你可以让你的服务生成并定期向系统发送按键以模拟用户活动。
**注意**
在更多地考虑之后,我想指出我采取的方法是在Windows中创建一个电源管理配置文件,将计算机配置为永不休眠或休眠。然后,从您的应用程序/服务中,监视活动的电源状态配置文件(使用上面的API),如果它发生更改,则以编程方式将其更改回来。这应该是一种非常简洁的执行策略的方式。请参阅PowerSetActiveScheme。
答案 1 :(得分:3)
查看SetThreadExecutionState API。它使您能够通知系统您的应用程序处于活动状态,以便计算机不会进入休眠状态
答案 2 :(得分:1)
我们的紧急呼叫处理系统在许多月前遇到了类似(但倒置)的问题:唤醒已进入睡眠状态的监视器,以便其相关的整体扬声器播放铃声。我发现最好的方法是使用SendInput以编程方式将鼠标抖动一个像素然后再返回。代码使用带有SendInput的MOUSEEVENTF_MOVE。这是本机代码,而不是.Net,但它应该让你开始寻找。