在执行Ruby程序时阻止Windows 7 PC进入睡眠状态

在执行Ruby程序时阻止Windows 7 PC进入睡眠状态,ruby,windows-7,sleep,Ruby,Windows 7,Sleep,我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大的备份文件)。问题是,如果启用睡眠,它将中断应用程序。如果没有的话,这台电脑将持续运行数周,直到我下次来访。是否有某种方法可以防止执行期间睡眠,并让Windows在执行后睡眠 欢迎任何疯狂的想法;-) 我在Windows平台上做的不多,但以下方法似乎合乎逻辑: 在您的程序中,使用windows平台上可用的任何ruby LIB来检查是否启用了自动挂起/睡眠 如果启用,则禁用它 运行您的长任务 完成后,重新启用自动挂起/睡眠 如果

我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大的备份文件)。问题是,如果启用睡眠,它将中断应用程序。如果没有的话,这台电脑将持续运行数周,直到我下次来访。是否有某种方法可以防止执行期间睡眠,并让Windows在执行后睡眠


欢迎任何疯狂的想法;-)

我在Windows平台上做的不多,但以下方法似乎合乎逻辑:

  • 在您的程序中,使用windows平台上可用的任何ruby LIB来检查是否启用了自动挂起/睡眠
  • 如果启用,则禁用它
  • 运行您的长任务
  • 完成后,重新启用自动挂起/睡眠
  • 如果程序出错,您可能需要添加一些额外的逻辑来重新启用自动挂起

    此外,应用程序可能需要在有权启用/禁用自动挂起的帐户下运行


    希望这有帮助

    如果这是一个命令行程序,那么您可以使用如下反勾号将命令从Ruby发送到命令行

    puts `command here`
    
    因此,您可以通过发送此命令将计算机设置为不睡眠

    c:\windows\system32\powercfg.exe-change-standby timeout ac 0

    像这样

    puts `c:\\windows\\system32\\powercfg.exe -change -standby-timeout-ac 0`
    
    你必须用双精度转义
    \
    。虽然是在笔记本电脑上测试的,但对我有效。我想它在桌面上也会起同样的作用

    最后的数字是让电脑进入睡眠前的分钟数。我不知道是否可以检索原始值,但可以将其设置为任何数字。因此,要在10分钟后使计算机进入睡眠状态,您需要发送

    puts `c:\\windows\\system32\\powercfg.exe -change -standby-timeout-ac 10`
    
    因此,您可以在脚本开始时关闭睡眠,然后再打开睡眠

    希望这是适合你的

    是使用WinAPI函数的向上投票的建议,它使应用程序能够通知系统它正在使用,从而防止系统在应用程序运行时进入睡眠状态或关闭显示器。
    比如:

    require 'Win32API'
    ES_AWAYMODE_REQUIRED = 0x00000040
    ES_CONTINUOUS = 0x80000000
    ES_DISPLAY_REQUIRED = 0x00000002
    ES_SYSTEM_REQUIRED = 0x00000001
    ES_USER_PRESENT = 0x00000004
    func = Win32API.new 'kernel32','SetThreadExecutionState','L'
    
    func.call(ES_CONTINUOUS|ES_SYSTEM_REQUIRED)
    # doing your stuff...
    func.call(ES_CONTINUOUS)
    


    或者只是在键盘上放些东西(你说欢迎疯狂的想法)

    你还必须知道当前睡眠超时,以便在程序执行后正确恢复。@Nakilon,这就是为什么我提到我不知道是否可以检索当前设置的原因。OP没有具体说明这方面的要求。这将适用于简单的前提,即防止睡眠,然后允许睡眠,这样机器就不会运行数周。此外,由于OP提到我下次访问前的
    ,他可能会手动检查当前睡眠设置,然后在运行应用程序前调整第二个命令的时间(假设未以某种方式编译)。此外,检查您是否使用电池或充电器可能非常方便。如果这是一个长期运行的过程,并且您使用电池,并且您不让机器睡眠,则可能会耗尽电池并导致所有故障。这会让我说脏话。继续你的疯狂想法,在k上放一些东西eyboard,你可以在模拟手表上设置一个带有激光的光学鼠标:)这样你就不用担心键盘上的随机输入了