Hallo, kurz zur Situation: Für ein Projekt sollen Stationsrechner einer Fertigungsanlage über eine SPS (Siemens S7, 1500er Serie) hoch- und runtergefahren werden können. Das Hochfahren war kein Problem, das funktionierte über WOL wie von alleine. Für das Runterfahren habe ich jetzt einen UDP-Server in C geschrieben (mit der Winsock-API), der von der SPS die IP-Adresse des herunterzufahrenden Rechners zugeschickt bekommt, um diesen dann per net use und shutdown herunterzufahren. Dieses Serverprogramm läuft momentan auf einem OPC-Server-PC (Intel NUK), muss jedoch aktiv, also im Vordergrund laufen, um die UDP-Packets zu empfangen. Für diesen Fall funktioniert das Programm auch einwandfrei. Da auf dem NUK aber immer mal wieder gearbeitet werden muss, ist diese Lösung leider nur suboptimal. Wenn das Programm bisher im Hintergrund läuft, wird der Socket erstellt und auch gebunden, aber der recvfrom empfängt einfach nichts. Ich kann mir das anders nicht erklären, als dass Windows das Programm "ignoriert" oder das, was an der Schnittstelle anliegt nicht zum Programm durchreicht, sobald der recvfrom blockiert. Die Idee war jetzt zu versuchen die Priorität des Programms höher zu setzen, sodass es auf jeden Fall die Packets empfängt und die Rechner herunterfährt, auch wenn es im Hintergrund läuft. Unter C# gibts da wohl auch noch ein paar mehr Möglichkeiten hab ich in der Windows-Doku gelesen, aber ich kann nur C und ein bisschen C++, das hilft mir also nicht...
Ich hoffe hier kann mir jemand helfen oder einfach ein paar Denkanstöße geben, am besten mit einigen Hintergrundinfos zur Funktionsweise von Windows. Ich habe den Thread übrigens hier reingestellt, weil auf dem NUK Win10 läuf. Falls es in einem anderen Themenbereich besser passt, einfach verschieben ;)