veraxel
Goto Top

Meldungen ausgeben als Dienst

keine Anzeige vom Programm, als Dienst gestartet...

Hallo,

ich habe ein kleines Script programmiert welches ich als Dienst eingerichtet habe. Es startet auch.
Das Programm soll unter anderem für eine kurze Zeit eine Information anzeigen.
Das Problem ist nur das Meldungen, also normale System-Fenster, vor dem Anmeldefenster (Windows XP) nicht angezeigt werden.

Testweise habe ich im Script die Anzeigedauer verlängert und wenn ich mich als Administrator schnell anmelde, kann ich noch die letzten Sekunden von der Meldung sehen.

Wie lässt es sich einstellen das mein Informationsfenster schon vor dem Anmeldefenster angezeigt wird.
Im Dienst habe ich das Häkchen für "Datenaustausch zwischen Dienst und Desktop zulassen" gesetzt/aktiviert.

Bin für jede Hilfe dankbar!

Ach ja... Nein, ich kann es nicht im Autostartordner setzen, das Prg. muss vor der Benutzeranmeldung gestartet werden!

Content-Key: 172411

Url: https://administrator.de/contentid/172411

Printed on: April 19, 2024 at 02:04 o'clock

Mitglied: 99045
99045 Sep 01, 2011 at 11:03:01 (UTC)
Goto Top
Hi,

genaue Betriebssystemangaben bitte. face-wink

Gruß
Member: veraxel
veraxel Sep 01, 2011 at 11:17:43 (UTC)
Goto Top
Hi Kaputtnick.

Windows XP Pro inkl. aller SP und Updates.
Mitglied: 99045
99045 Sep 01, 2011 at 11:32:47 (UTC)
Goto Top
Hi, veraxel,

ob ein selbstinstallierten Dienst in der Auflistung unter services.msc erscheint, weiß ich nicht. Wenn doch, sieh mal unter "Anmeldung" nach, ob das Aktivieren des Datenaustauschs mit dem Desktop dir Abhilfe bringt.

Ansonsten gibt es in den Gruppenrichtlinien bei Administrativen Vorgaben unter System > Scripts die Möglichkeit, Scripte sichtbar und nicht gleichzeitig ausführen zu lassen. In der Benutzerkonfiguration könnte man so z. B. über ein Startscript entsprechende Hinweise (ohne Dienst) anzeigen lassen. Vielleicht wäre das eine Möglichkeit.

Gruß
Member: DerWoWusste
DerWoWusste Sep 01, 2011 at 15:33:24 (UTC)
Goto Top
Hi.

Beschreib mal genauer, wie Dein Text erzeugt wird.
Wenn Du bespielsweise den Befehl
msg * Test
absetzt, dann schiebt der sein Fenster auch vor den Logonscreen.
Member: veraxel
veraxel Sep 02, 2011 at 08:58:41 (UTC)
Goto Top
Es handelt sich um ein Script in Autoit programmiert.
Einfache Bildschirmausgaben lassen sich mit MsgBox erledigen.
Als Parameter kann man mit angeben dass das Fenster immer im Vordergrund erscheint.
Aber egal wie ich es anstelle, es wird nichts angezeigt. Das Script wird aber ausgeführt.
Member: DerWoWusste
DerWoWusste Sep 02, 2011 at 09:48:24 (UTC)
Goto Top
Das wird was mit der Sitzungssicherheit zu tun haben. Vor dem Anmeldebildschirm ist nur der Benutzer "System" angemeldet. Ist es evtl. möglich, die Ausgaben an die msg.exe umzuleiten?
Member: veraxel
veraxel Sep 07, 2011 at 10:59:31 (UTC)
Goto Top
Leider verzweifel ich immer noch an dem Problem.
Vielleicht hat noch jemand eine Idee woran es liegen könnte dass Bildschirmausgaben vor der Benutzeranmeldung nicht angezeigt werden.

Mein Autoit-Testscript :

SplashTextOn("test","das ist ein Test") ; Zeige ein Fenster im Vordergrund mit dem Text
Sleep(60000) ; Warte 60 sekunden
SplashOff() ; Blende das Fenster wieder aus.


Das Fenster, welches bei Splash vorrangig dargestellt wird und nicht im Hintergrund geklickt werden kann, wird nach dem Start 60sek. lang angezeigt und das Prg. wird dann wieder beendet.
Die test.exe habe ich compiliert und nach c:\daten kopiert.

Mit dem Kommandozeiletool sc.exe habe ich den Dienst wie folgt hinzugefügt :
sc create test binPath= c:\daten\test.exe

Der Eintrag erfolgt dann in den Diensten. Dort habe ich noch in den Eigenschaften des eben erstellten Dienstes "test" das Häkchen gesetzt für "Datenaustausch zwischen Dienst und Desktop zulassen" und den Starttyp auf Automatisch gesetzt.

Nun habe ich den PC mit Windows XP SP3 und Mitglied einer Domäne neu gestartet.

Der Rechner bootet und das Anmeldefenster erscheint. Doch leider sieht man kein Fenster face-sad
Ich warte 10-20 sek. lang und melde mich dann als lokalen Administrator an und siehe da, das Fenster erscheint und blendet sich nach wenigen Sekunden aus. Das Script wurde also auch beim booten gestartet, aber das Fenster wird nur nach der Anmeldung angezeigt. Warte ich natürlich mit der Anmeldung zu lange, sieht man das Fenster nicht mehr nach einer Benutzeranmeldung.

Tja... was muss ich tun damit mein Fenster VOR der Anmeldung erscheint???
Member: DerWoWusste
DerWoWusste Sep 07, 2011 at 11:50:55 (UTC)
Goto Top
Du bist völlig verzweifelt, quasi den Tränen nahe. Dennoch sagst Du nichts zu meinem Tipp mit der Umleitung an msg.exe, die Nachrichten an * verschicken kann, welche immer und überall sichtbar sind. Warum?
Mitglied: 99045
99045 Sep 07, 2011 at 12:11:53 (UTC)
Goto Top
Member: veraxel
veraxel Sep 07, 2011 at 13:40:44 (UTC)
Goto Top
Hallo,

vielleicht sollte ich noch hinzufügen dass in dem oben genannten Testscript zwar nur Text dargestellt wird, das ursprüngliche Programm aber ein recht komplexes Fenster mit Grafiken und formatierten Text anzeigt.
Genauer gesagt holt sich das Programm beim booten Informationen aus dem Netzwerk und soll diese vor der Anmeldung anzeigen. Das Prg. ist auch fertig und funktioniert, nur das die Anzeige nicht als Dienst läuft.

@DerWoWusste
ich weiß nicht so ganz wie ich eine Umleitung an msg.exe im Script realisieren soll. Aber so weit ich nachlesen konnte lässt sich mit msg.exe nur reiner Text darstellen, oder? Aber ich kann es trotzdem mal versuchen. Wenn ich in der Kommandozeile "msg administrato test" eingebe, kommt auch eine Nachricht. Wenn ich "msg SYSTEM test" eingebe, kommt eine Fehlermeldung. Wie muss der Befehl aussehen im Dienst?

@99045
Die Möglichkeit kannte ich nocht nicht. Danke. Aber ich befürchte ich kann diese Möglichkeit nicht nutzen, weil sich damit nur einfacher Text darstellen lässt. Zudem weiß ich die Informationen, die angezeigt werden sollen, vorher nicht und werden vom Script abgerufen.
Mitglied: 99045
99045 Sep 07, 2011 at 15:11:26 (UTC)
Goto Top
@veraxel
An System kannst du nichts mit mgs schicken, und solange niemand angemeldet ist, kommt auch keine Nachricht, die mit Msg an "*" oder sonstwen geschickt wurde an.
Member: DerWoWusste
DerWoWusste Sep 08, 2011 at 07:14:40 (UTC)
Goto Top
Moin Kaputtnick.

Auch wenn niemand angemeldet ist, kommt eine Nachricht, deshalb nenne ich doch dies als Tipp.
msg * test
in einem Startskript zeigt es.

@veraxel
Was für "nicht reinen" Text möchtest Du darstellen?
[Zum Befehl: siehe oben]
Mitglied: 99045
99045 Sep 08, 2011 at 08:24:54 (UTC)
Goto Top
Moin,

nee, kommt sie nicht, jedenfalls nicht unter XP, sonst hätte ich das sicher nicht geschrieben.
Member: DerWoWusste
DerWoWusste Sep 08, 2011 at 08:30:40 (UTC)
Goto Top
Ich schreib auch nur Dinge, die ich teste. Tja, dann ist Dein xp vergurkt. Kleiner Scherz.
Mitglied: 99045
99045 Sep 08, 2011 at 08:39:00 (UTC)
Goto Top
Zitat von @DerWoWusste:
Ich schreib auch nur Dinge, die ich teste. Tja, dann ist Dein xp vergurkt. Kleiner Scherz.

Dann müssten aber alle meine XPs vergurkt sein.
Erstell doch mal 'nen geplanten Task mit msg * irgendwas und lass den beim Systemstart ausführen, Wie du sehen wirst, wirst du nichts sehen, nur dass der Task ausgeführt wurde.
Der User NT-Autorität\System oder auch nur SYSTEM hat mit MSG nun mal nichts am Hut.
Member: DerWoWusste
DerWoWusste Sep 08, 2011 at 08:40:48 (UTC)
Goto Top
Gut, gib mir 2 Minuten.
Member: DerWoWusste
DerWoWusste Sep 08, 2011 at 09:08:29 (UTC)
Goto Top
Also... warum das Startskript NICHT geht, will mir nicht einleuchten, aber da komme ich evtl. noch drauf.
Was jedoch geht, ist ein MSG von außen, das schickt auch an System, siehe Bild:
http://250kb.de/u/110908/g/ypyOKVQtS8aO.gif

Ich hätte schwören können, ich habe es schonmal per Startskript probiert. Mal sehen, woran das liegt.
Mitglied: 99045
99045 Sep 08, 2011 at 09:35:40 (UTC)
Goto Top
Ich kann dir sagen, woran es liegt:
Bei der klassischen Benutzeranmeldung funktioniert es (erst mal nur von außen), wenn man den Willkommensbildschirm verwendet, geht es nicht.
Ein Startscript im Computerkontext bringt in beiden Fällen keine Meldung auf den Bildschirm, im Benutzerkontext funktioniert auch ein MSG-Startscript, allerdings erst nach der Anmeldung, und das wollte der TO ja nicht.
Member: veraxel
veraxel Sep 08, 2011 at 09:43:57 (UTC)
Goto Top
Ich habe es bei mir auch gerade getestet, leider wird auch mittels msg * test nichts angezeigt. Wenn es gegangen wäre, hätte ich versuchen können das Fenster mit AutoIt anzusprechen und den Inhalt ändern.

@DerWoWusste
Der Inhalt ist letztendlich eine HTML-Datei die in einem Fenster eingebettet ist.
Die HTML-Datei wird im Script zuvor mit Werten gefüllt und dann dargestellt.
Bilder und formatierter Text zum Beispiel.

Wenn es mit einem einfachen MSG-Fenster geht, dann denke ich, wird es auch mit dem richtigen Script gehen.
Gehen muss es ja irgendwie... andere Programme werden auch dargestellt, zum Beispiel unser Software-Verteilungs-System poppt auch immer vor der Anmeldung auf.
Ich hab da ja schon versucht bei diesen Dienst abzugucken, vielleicht ist ja irgendwo ein Bit anders gesetzt, als bei mir. Aber konnte nichts auffälliges entdecken.

Mir kommt gerade die Idee... ich werde mal an einem Testrechner den Dienst von der Software-Verteilung in der Registry ändern und nur den Pfad zum Programm ändern. Mal sehen ob mein Fenster dann angezeigt wird... hehehe.. face-wink
Member: veraxel
veraxel Sep 08, 2011 at 11:11:49 (UTC)
Goto Top
Schade, klappt leider nicht. Ich habe den Pfad zur EXE auf mein Testprogramm geändert. Beim booten sehe ich trotzdem nichts.
Das deutet aber darauf hin dass im Script irgendwas eingebaut werden muss, damit die Darstellung funktioniert.
Member: DerWoWusste
DerWoWusste Sep 09, 2011 at 14:58:19 (UTC)
Goto Top
So, Freunde der Sonne...

Warum das mit msg nicht so lief, wie erwartet, ist mir nicht ganz klar, weiterhin. Einen funktionierenden Umweg habe ich dennoch gefunden: Man steuert gezielt die Konsolensitzung an.
msg console /time:0 Nachricht
Der Time-Switch ist notwendig, weil msg-Nachrichten default nach 60 Sekunden von alleine schließen (wieder was gelernt).

Das funktioniert schon mal. Nun musst Du mit einer for-Schleife Deine Nachricht aus einer Textdatei einlesen, etwa so:
for /f %aa in (->Pfad zur Logfiledate<-) do msg console /time:0 %%a

Wie man nun aber mehr als nur Text ausgeben soll, kann ich Dir nicht sagen.

Kaputtnick, hast Du vielleicht eine Erklärung dafür, warum msg console geht, aber msg * nicht? Und zwar nur dann nicht, wenn im Startskript ausgeführt? Es liegt somit nicht am Benutzer, sondern an der Art, wie es gestartet wird.
Mitglied: 99045
99045 Sep 09, 2011 at 15:05:16 (UTC)
Goto Top
Hi,

eine mögliche Erklärung wäre vielleicht, dass die Meldung vor dem Willkommensbildschirm zwar ausgegeben wird, aber vom Logon-(Willkommens-)Screen überschrieben wird, der ja direkt auf den Bildschirm gezeichnet wird. Das würde auch erklären, warum die Meldung remote dann funktioniert, wenn die klassische Anmeldung verwendet wird. Aber irgendwie rausbekommen kann man das ja leider nicht so 100-prozentig. Möglich wäre auch, dass die Reihenfolge der Abarbeitung der Startumgebung auch eine Rolle spielt. Das sind aber alles nur Vermutungen.

Was ich dazu gefunden habe, ist
das und das. Passt aber alles nicht so richtig.

Edit: Gerade nochmal ausprobiert:
MSG 0 /server:computername Nachricht
funktioniert genauso wie
MSG console /server:computername Nachricht
bei einer Nachricht an einen Remote-Computer, der den Willkommensbildschirm anzeigt.

An TO: Probiere mal, ob du mit dieser Syntax wenigstens die Textmeldung ausgegeben bekommst.