2010-11-08 8 views
5

Ho bisogno di eseguire un'app Ruby su un computer del cliente. Di solito ci vorranno un paio di giorni (copia grandi file di backup). Il problema è che se sleep è abilitato, interromperà l'app. Altrimenti il ​​computer rimarrà acceso per settimane fino alla mia prossima visita. C'è un modo per prevenire il sonno durante l'esecuzione e lasciare che Windows dorme dopo?Arrestare un PC Windows 7 dall'arresto in modalità standby mentre viene eseguito un programma Ruby

Tutte le idee folli sono i benvenuti ;-)

risposta

0

non faccio molto sulla piattaforma Windows, ma il seguente approccio sembra logico:

  1. Nel programma, qualunque sia l'uso sono disponibili librerie rubino per la piattaforma Windows per verificare se è attiva la sospensione/sospensione automatica.
  2. Se abilitato, disabilitarlo.
  3. Esegui i tuoi lunghi compiti.
  4. Una volta fatto, ri-abilitare l'auto sospensione/sleep

Probabilmente si sta andando ad avere bisogno di aggiungere un po 'di logica aggiuntiva per riattivare Auto Suspend se i vostri errori di programma fuori.

Inoltre, potrebbe essere necessario eseguire l'applicazione con un account che ha accesso per abilitare/disabilitare la sospensione automatica.

Spero che questo aiuti!

2

Se questo è un programma a riga di comando, allora è possibile inviare comandi da Ruby a riga di comando utilizzando apici inversi come questo

puts `command here` 

così allora è possibile impostare il computer di non dormire con l'invio di questo comando

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

come questo

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

Devi sfuggire allo \ con il doppio. Testato e funziona per me, anche se su un laptop. Presumo che funzionerebbe lo stesso su un desktop.

Il numero alla fine è il tempo in minuti prima di mettere il computer in modalità di sospensione. Non so se puoi recuperare il valore originale, ma puoi impostarlo su qualsiasi numero. Così, per mettere il computer a dormire dopo 10 minuti, si dovrebbe inviare

puts `c:\\windows\\system32\\powercfg.exe -change -standby-timeout-ac 10` 

Così si può disattivare il sonno all'inizio della sceneggiatura e girare il sonno di nuovo in seguito.

Spero che questo sia adatto a te!

+0

È inoltre necessario conoscere corrente timeout di sonno per recuperare in modo corretto dopo il programma eseguito. – Nakilon

+0

@Nakilon, è per questo che ho detto che non so se è possibile recuperare l'impostazione corrente. L'OP non ha specificato un requisito su questo fronte. Ciò funzionerebbe per la semplice premessa di impedire il sonno e quindi di consentire il sonno in seguito, in modo che la macchina non venga lasciata accesa per più settimane. –

+0

Inoltre, dal momento che l'OP ha menzionato "settimane prima della mia prossima visita", potrebbe eventualmente controllare manualmente l'impostazione attuale del sonno e quindi regolare il tempo per il 2 ° comando prima di eseguire la sua app (supponendo che non sia compilato in qualche modo). –

6

Here è consigli upvoted utilizzare SetThreadExecutionState funzione WinAPI, che consente un'applicazione per informare il sistema che è in uso, impedendo così il sistema di immettere dormire o spegnere il display durante l'esecuzione dell'applicazione.
Qualcosa di simile:

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) 


O semplicemente mettere qualcosa sulla tastiera (hai detto idee folli sono i benvenuti)

+0

Inoltre, potrebbe essere davvero facile da usare per controllare e vedere se si sta utilizzando la batteria o il caricabatterie. Se si tratta di un processo di lunga durata e si sta scaricando la batteria e non si sta lasciando spegnere la macchina, è possibile scaricare la batteria e causare il malfunzionamento. Questo mi farebbe dire parolacce. –

+2

Per andare con la tua pazza idea di mettere qualcosa sulla tastiera, puoi impostare un mouse ottico con il laser sopra un orologio analogico :) In questo modo non devi preoccuparti dell'input casuale dalla tastiera –

Problemi correlati