Wie starte ich ein GUI-Programm in einem Windows-Dienst?

8

Wenn ich einen Dienst als LocalSystem-Account betreibe, kann ich mit folgenden Codes ein GUI-Programm unter dem aktuellen Login-Account starten:

WTSGetActiveConsoleSessionId- & gt; WTSQueryUserToken- & gt; CreateProcessAsUser

Wenn ich den Dienst jedoch als mein persönliches Konto ausführe, wird das GUI-Programm NICHT angezeigt. Ich kann es jedoch im Aufgabenmanager sehen.

Was soll ich tun, um das GUI-Programm zu starten, wenn der Dienst unter meinem persönlichen Konto läuft?

    
trudger 04.06.2009, 03:15
quelle

4 Antworten

2

John und jdigital haben beide Recht - von meinem Verständnis her können Dienste im Allgemeinen entweder Desktop-Zugriff (Sie müssen local system verwenden) oder Netzwerkzugriff haben (Sie müssen ein Konto angeben, unter dem ausgeführt werden soll).

Sie müssen zwei Apps in zwei Teile aufteilen - eine für die Interaktion mit dem Desktop und die andere für das Gespräch über das Netzwerk. Die zwei Teile können dann miteinander kommunizieren, um Informationen an den Endbenutzer weiterzugeben.

    
Andy Stewart 04.06.2009, 15:02
quelle
0

Es hat alles mit Berechtigungen zu tun, glaube ich.

LocalSystem verfügt über ausreichende Berechtigungen zum Annehmen des aktuellen Benutzers, aber nicht zu Ihrem Konto.

Sie müssen herausfinden, wie Sie die Berechtigungen für Ihren Dienst erweitern können, indem Sie entweder nach Anmeldeinformationen gefragt werden oder eine Verbindung zu einem Hilfsdienst herstellen, der als LocalSystem ausgeführt wird.

(Warum möchten Sie mit Ihrem Konto anstatt mit LocalSystem arbeiten?)

Ich bin mir sicher, dass es viel gründlichere Antworten gibt, die sich mit den Ein- und Ausgängen befassen, aber auf hoher Ebene denke ich, dass dies das Problem ist.

    
John Weldon 04.06.2009 03:45
quelle
0

Möglicherweise laufen Sie in der falschen Fensterstation oder auf dem Desktop. Siehe Microsoft-Referenz zu Windows Stations und Desktops .

    
jdigital 04.06.2009 05:09
quelle
0

Ich glaube, dass das, was Sie zu tun versuchen, als Sicherheitslücke betrachtet werden kann. In einigen Fällen wird es wahrscheinlich auch nicht funktionieren. Ich denke, dass jdigital richtig ist, weil es mit Fensterstationen zu tun hat und versucht, Zugriff auf die aktuelle Benutzer-Fensterstation und ihren Desktop zu bekommen. Dies ist sehr verwirrend, wenn Sie sich unter einem Terminaldiensteserver befinden, auf dem sich mehrere aktuelle Fensterstationen befinden. Microsoft will Sie wirklich nicht, was Sie wollen, und sie machen es schwieriger mit jeder Veröffentlichung von Windows.

Ich denke, Ihre beste Lösung ist es, das Problem aus einem anderen Blickwinkel zu lösen und einfach eine GUI-Anwendung zu erstellen, die der Benutzer ausführt (manuell oder automatisch bei der Anmeldung) und mit Ihrem Dienst kommuniziert.

    
Shane Powell 04.06.2009 06:33
quelle