2010-11-08 4 views
5

Ich muss eine Ruby-App auf einem Kundencomputer ausführen. Es dauert normalerweise ein paar Tage, bis Sie fertig sind (kopiert große Backup-Dateien). Das Problem ist, wenn der Ruhezustand aktiviert ist, wird die App unterbrochen. Wenn nicht, bleibt der Computer wochenlang bis zu meinem nächsten Besuch. Gibt es eine Möglichkeit, den Schlaf während der Ausführung zu verhindern und Windows danach schlafen zu lassen?Beenden Sie einen Windows 7 PC aus dem Ruhezustand, während ein Ruby-Programm ausgeführt wird

Alle verrückten Ideen sind willkommen ;-)

Antwort

0

ich auf der Windows-Plattform nicht viel tun, aber der folgende Ansatz scheint logisch:

  1. In Ihrem Programm verwenden, was Rubin Libs verfügbar sind für die Windows-Plattform zu überprüfen, ob Auto Suspend/Sleep aktiviert ist.
  2. Wenn aktiviert, deaktivieren Sie es.
  3. Führen Sie Ihre langen Aufgaben aus.
  4. Ist das erledigt, aktivieren Auto Suspend/Schlaf

Sie sind wahrscheinlich, wenn Ihr Programm Fehler heraus gehen zu müssen einige zusätzliche Logik hinzufügen Auto wieder zu aktivieren, suspendieren.

Die Anwendung muss möglicherweise auch unter einem Konto ausgeführt werden, das Zugriff zum Aktivieren/Deaktivieren der automatischen Unterbrechung hat.

Hoffe, das hilft!

2

Wenn dies ein Kommandozeilen-Programm ist, dann können Sie Befehle von Ruby nach der Kommandozeile mit Backticks wie diese

puts `command here` 

senden, so können Sie den Computer so nicht

durch das Senden dieses Befehls schlafen

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

wie diese

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

Sie müssen die \ mit dem Doppel entkommen. Getestet und funktioniert für mich, obwohl auf einem Laptop. Ich nehme an, es würde auf einem Desktop genauso funktionieren.

Die Zahl am Ende ist die Zeit in Minuten, bevor der Computer in den Ruhezustand versetzt wird. Ich weiß nicht, ob Sie den ursprünglichen Wert abrufen können, aber Sie können ihn auf eine beliebige Zahl setzen. So um den Computer setzen nach 10 Minuten schlafen, würden Sie

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

So können Sie schlafen am Anfang des Skripts deaktivieren und den Schlaf wieder danach drehen.

Hoffe, das ist für Sie geeignet!

+0

Sie auch aktuelle Schlaf Timeout es nach Programm ausgeführt richtig zu erholen wissen müssen. – Nakilon

+0

@ Nakilon, deshalb habe ich erwähnt, dass ich nicht weiß, ob es möglich ist, die aktuelle Einstellung abzurufen. Das OP hat an dieser Stelle keine Anforderung festgelegt. Dies würde für die einfache Prämisse funktionieren, den Schlaf zu verhindern und dann den Schlaf danach zu erlauben, so dass die Maschine für mehrere Wochen nicht eingeschaltet bleibt. –

+0

Da das OP auch "Wochen bis zu meinem nächsten Besuch" genannt hat, könnte er möglicherweise die aktuelle Schlafeinstellung manuell überprüfen und dann die Zeit für den zweiten Befehl anpassen, bevor er seine App startet (vorausgesetzt, es ist nicht irgendwie kompiliert). –

6

Here ist upvoted Beratung SetThreadExecutionState WinAPI Funktion zu verwenden, die eine Anwendung ermöglicht, das System zu informieren, dass es in Gebrauch ist, wodurch das System daran gehindert Schlafes Eingabe oder die Anzeige ausgeschaltet, während die Anwendung ausgeführt wird.
Etwas wie:

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) 


Oder einfach legte etwas auf der Tastatur (die Sie verrückten Ideen sind willkommen)

+0

Darüber hinaus könnte es sehr benutzerfreundlich sein zu überprüfen und zu sehen, ob Sie mit Batterie oder Ladegerät laufen. Wenn es ein langwieriger Prozess ist und Sie im Akkubetrieb sind und Sie die Maschine nicht schlafen lassen, können Sie die Batterie entladen und alles zum Scheitern bringen. Das würde mich dazu bringen, schlechte Worte zu sagen. –

+2

Um mit Ihrer verrückten Idee etwas auf die Tastatur zu setzen, könnten Sie eine optische Maus mit dem Laser auf eine analoge Uhr stellen :) So müssen Sie sich keine Gedanken über die zufällige Eingabe von der Tastatur machen –