Ein Kollege verfügt über ein Batch-Skriptprogramm, das auf einem Windows Server im Konsolenmodus ausgeführt werden muss, damit es auf eine interaktive Windows-Sitzung zugreifen kann. Der Server wird automatisch in regelmäßigen Abständen neu gestartet (es gibt eine nicht verwandte Closed-Source-Anwendung, die auf diesem Computer ausgeführt wird, auf die wir keine Kontrolle haben). Nach einem Neustart möchte er automatisch eine interaktive Windows-Sitzung starten und dieses Skript ausführen lassen, außerdem muss der Dienst auch Zugriff auf Netzwerkressourcen haben (insbesondere CIFS-Laufwerke).
Folgendes haben wir bisher versucht:
Irgendwelche anderen Vorschläge? (Oder hat er etwas übersehen, als er einen dieser Vorschläge aufstellte?)
Falls "Interaktion mit Desktop" auf dem Dienst nicht ausreicht (ich habe eine Handvoll Fälle gesehen, in denen dies nicht der Fall ist), können Sie es mit AutoAdminLogon kombinieren. Erstellen Sie drei (oder vier für eine Domäne) REG_SZ Werte unter HKLM \ Software \ Microsoft \ Windows NT \ CurrentVersion \ Winlogon:
AutoAdminLogon sollte auf die Zeichenfolge "1" festgelegt werden, die anderen sind selbsterklärend.
Offensichtlich hat dies Sicherheitsprobleme groß genug, um Jupiter durch zu fliegen.
Haben Sie versucht, Ihr Skript als Windows-Dienst ausführen zu lassen, aber es mit dem Desktop interagieren zu lassen?
Speziell:
Ich empfehle diesen Weg anders. Sie könnten eine andere Windows-App erstellen, die über IPC mit dem Windows-Dienst kommuniziert und das könnte mit der Closed Soorce-Anwendung umgehen. Aber wenn Sie müssen, können Sie eine Option im Dienst angeben (Sie können dies über MMC, Registrierung usw. tun). Grundsätzlich können Sie diese Option sehen, indem Sie zu Computer-Management- & gt; Dienste und Anwendungen- & gt; Dienste- & gt; Klicken Sie mit der rechten Maustaste auf Ihre Service- & gt; Konto zu lokalen System ändern und aktivieren Sie "System mit Desktop interagieren."
Ich empfehle jedoch erneut, einen anderen Pfad zu wählen.
Ich musste in letzter Zeit etwas Ähnliches machen; Eine Route, die ich aufgrund von Sicherheitsbedenken gefunden, aber verworfen habe, besteht darin, den interaktiven Dienst selbst im interaktiven Modus ausführen zu lassen und dann die ImpersonateUser-Funktion in der win32-API auszuführen, von der ich glaube, dass sie die Vorteile bietet sowohl ein Benutzer als auch die interaktive Sitzung, die vom LocalSystem verfügbar ist.
Es ist unnötig zu sagen, dass wenn jemand in einen Dienst einbrach, der das tat, sie die totale Kontrolle über die Maschine hätten.
Siehe meine ähnliche Frage und echte Antwort darauf: So starten Sie einen Prozess vom Windows-Dienst in die aktuell angemeldete Benutzersitzung Hinweis: "Interaktion mit Desktop" Kontrollkästchen ist überhaupt nicht genug.
Tags und Links windows service batch-file