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.
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.
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.
Tags und Links c# windows-services windows