SetThreadExecutionState funktioniert nicht, wenn es vom Windows-Dienst aufgerufen wird

8

Ich möchte verhindern, dass das System über einen Windows-Dienst in den Ruhezustand / Ruhezustand wechselt. Ich rufe SetThreadExecutionState function an, um das zu tun. Aber es scheint keine Wirkung zu haben. Ich möchte nur wissen, ob die Funktion SetThreadExecutionState für Windows-Dienste wird. Wenn nicht, was werden die alternativen Wege dazu sein.

Unten ist der C # -Code, den ich verwende. Ich rufe es auf Onstart Methode des Dienstes.

%Vor%     
Prasad 03.05.2011, 13:35
quelle

2 Antworten

10
  

Das Aufrufen von SetThreadExecutionState ohne ES_CONTINUOUS setzt einfach den Leerlaufzeitgeber zurück; Um die Anzeige oder das System im Arbeitsstatus zu halten, muss der Thread SetThreadExecutionState in regelmäßigen Abständen aufrufen.

( Quelle )

Sie müssen diese Funktion immer wieder aufrufen. Es ist kein Feuer und Vergessen.

    
Roman Starkov 03.05.2011, 13:40
quelle
6

SetThreadExecutionState ist nur für den Thread gültig, der es aufruft. Wenn es in einem Worker-Thread aufgerufen wird, auch mit ES_CONTINUOUS, ist die Einstellung ungültig, sobald der Worker-Thread inaktiv ist. Dann wird der Bildschirmschoner wieder aktiviert.

Wenn Sie diese API von einem Timer aufrufen, wird ein Worker-Thread aktiviert, bevor der vorherige Thread inaktiv ist und daher funktioniert.

Wenn Sie also SetThreadExecutionState in Ihrem Hauptthread aufrufen, z. B. den UI-Thread in Clientanwendungen, benötigen Sie keinen Timer.

    
hebinda 26.12.2014 02:36
quelle

Tags und Links