NWC Services Blog
Messagebox durch Dienste erzeugen lassen
Unter Windows XP bzw. Windows Server 2003 und früheren Windows-Versionen war es problemlos möglich, durch Dienste ein Meldungsfenster auf dem Desktop darstellen zu lassen. Dies wurde - gerade auch in NetIntall-Umgebungen - auch durchaus regelmäßig angewendet, beispielsweise wenn durch den Service-Installer eine Installation ausgeführt wurde, die einen Neustart erforderte. Dann konnte man durch die NetInstall-Scriptbefehle "MessageBox" oder "MessageBoxEx" eine Meldung anzeigen lassen, und den Benutzer auf den bevorstehenden Neustart aufmerksam machen oder ihn fragen, ob der Neustart jetzt direkt ausgeführt werden sollte.
Seit Windows Vista können Dienste jedoch keine Meldungsfenster mehr anzeigen - die Ursache hierfür liegt in der sogenannten "Session 0 Isolation", auf die an dieser Stelle nicht näher eingangen werden soll. Sehr interessante Hintergrundinformationen dazu findet man beispielsweise unter http://windowsteamblog.com/windows/b/developers/archive/2009/10/01/session-0-isolation.aspx. Auf jeden Fall führt diese Session 0 Isolation dazu, dass das oben beschriebene Szenario mit dem Meldungsfenster, das fragt, ob ein Reboot ausgeführt werden darf, unter Windows Vista, Windows Server 2008 und höher nicht mehr funktioniert
Um nun diesem Problem zu begegnen, hat die NWC Services eine neue Version des Tools MSGBOXT entwickelt.
Ursprünglich war MSGBOXT dazu gedacht, Messageboxen anzuzeigen, die einen Timeout besitzen. Wird während einer definierbaren Zeit keiner der auf der Messgebox angezeigten Buttons geklickt, wird ein Vorgabewert angenommen. Das kann beispielsweise dazu verwendet werden, in der beschriebenen Situation einen automatischen Neustart auszuführen, wenn der Anwender innerhalb der Zeitspanne diesen nicht ablehnt (weil er beispielsweise nicht am Platz ist).
Die neue Version 2.0 von MSGBOXT hat nun einen zusätzlichen Parameter "/s" (als Abkürzung für "Session"), mit dem sich angeben lässt, auf welcher Session die Meldung ausgegeben werden soll. Während früher alle Dienste und auch der erste angemeldete Benutzer sich die Session 0 teilten, ist es seit Vista nun so, dass der erste angemeldete Benutzer in Session 1 arbeitet. Durch Angabe von "/s:1" beim Aufruf von MSGBOXT durch einen Dienst, ist es daher möglich, einem interaktiv angemeldeten Benutzer eine Messagebox zu präsentieren und im weiteren Verlauf des Scripts auf den jeweils ausgewählten Button reagieren zu können.
Erreicht wird das durch die Verwendung der API-Funktion "WTSSendMessage" (die beispielsweise auch das Microsoft-Tool MSG.EXE verwendet), die eigentlich für Terminal-Server Umgebungen gedacht ist, wo ja in der Regel viele Benutzer an einem Rechner angemeldet sind. Der Vorteil von MSGBOXT gegenüber MSG besteht darin, dass zum einen die angezeigten Buttons angegeben werden können (während MSG nur einen OK-Button darstellen kann, sind mit MSGBOXT beliebige gültige Kombinationen möglich) und dass die gewählte Schaltfläche als Returncode an das aufrufenden Script zurückgegeben wird, sodass auf die Benutzerauswahl entsprechende reagiert werden kann.
Sie finden die Version 2.0 von MSGBOXT in 32- und 64-Bit Version als Freeware in unserem Download-Bereich. Der Download enthält auch eine Readme-Datei, die weitere Informationen enthält.
When you subscribe to the blog, we will send you an e-mail when there are new updates on the site so you wouldn't miss them.
Comments