Starten eines Windows-Dienst in einer interaktiven Sitzung
Ein Kollege hat ein batch-script-Programm muss auf einem Windows-Server im console-Modus, so dass Sie Zugriff auf eine Windows-interaktive Sitzung. Der server neu gestartet wird in regelmäßigen Abständen automatisch (es gibt eine unabhängige closed-source-Anwendung, die läuft auf dieser Maschine, die wir haben keine Kontrolle über Sie). Nach einem Neustart will er automatisch das starten eines Windows-interaktive Sitzung und haben dieses Skript auszuführen, plus der service muss auch Zugang zu Netzwerk-Ressourcen (CIFS-Laufwerke, im besonderen).
Hier ist, was wir bisher ausprobiert habe:
- Start als Windows-Dienst. Dies scheiterte, da ein Windows-Dienst kann entweder haben Zugang zu interaktiven Sitzung oder zu Netzwerk-Ressourcen, aber nie beide.
- Verwendet die Microsoft management console hinzufügen, das script beim Start ausgeführt werden, aber dies hat nicht funktioniert.
- Verwendet ein HKLM-Registrierungsschlüssel zu starten, um dieses Skript ausführen, aber es wird nur gestartet, wenn wir Sie manuell öffnen einer remote-desktop-Sitzung auf dem server.
- Sie einen geplanten task erstellen. Das Programm aufgerufen hast, nicht haben Zugang zu interaktiven windows-Sitzung.
Irgendwelche anderen Vorschläge? (Oder vielleicht hat er etwas verpasst, wenn er einen dieser Vorschläge?)
- Warum ist ein Neustart erforderlich, um das Recycling der Ressourcen von einem unordentlichen 3rd-party-app? Nur tötet es (das OS macht den Haushalt)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Im Fall "Interaktion mit desktop" auf den Dienst ist nicht genug (ich habe gesehen, dass eine Handvoll von Fällen, wo es nicht ist), Sie können kombinieren Sie es mit "AutoAdminLogon". Erstellen Sie drei (oder vier für eine domain) REG_SZ-Werte unter HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon:
"AutoAdminLogon" sollten festgelegt werden, um die string "1", die anderen sind selbsterklärend.
Offensichtlich hat Sicherheitsprobleme, die groß genug für die Fliegen Jupiter durch.
Haben Sie versucht, mit Ihrer Skript-Ausführung als Windows-Dienst, sondern ermöglicht es, die Interaktion mit dem desktop?
Speziell:
Ich empfehlen, geht über einen anderen Weg. Sie bauen konnte eine weitere Windows-app, die die Kommunikation über IPC an den Windows Service und das könnte sein, was sich mit der geschlossenen souorce Anwendung. Aber wenn Sie müssen, können Sie eine option in der service (Sie können dies tun, durch MMC, registry, etc). Im Grunde können Sie sehen, diese option, indem Sie auf Computerverwaltung->Dienste und Anwendungen->Dienste->Rechtsklick auf Ihr service->Ändern-Konto auf Lokales System und überprüfen Sie "Erlauben-system für die Interaktion mit desktop."
Jedoch, wieder, ich empfehle die Wahl einen anderen Weg.
Ich hatte etwas ähnliches vor kurzem, eine route, die ich gefunden habe aber verworfen aufgrund von Sicherheitsbedenken ist das interaktive service-set selbst als im interaktiven Modus ausgeführt und führen Sie dann das ImpersonateUser Funktion in der win32-API, die ich denke wird die Vorteile von sowohl einem Benutzer und dem interaktiven Sitzung zur Verfügung aus dem lokalen.
Unnötig zu sagen, wenn jemand brach in einen Dienst, der das täte, würden Sie haben die totale Kontrolle über die Maschine.
Siehe meine ähnliche Frage und eine wirkliche Antwort darauf: Wie zu Beginn eines Prozesses von windows service in der aktuell angemeldet Benutzer session
HINWEIS: "Interaktion mit desktop" checkbox ist nicht genug überhaupt.