Starten eines Windows-Dienstes in einer interaktiven Sitzung

8

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:

  1. Starten Sie als Windows-Dienst. Dies ist fehlgeschlagen, da ein Windows-Dienst entweder Zugriff auf die interaktive Sitzung oder für Netzwerkressourcen haben kann, aber niemals beides.
  2. Benutzte Microsoft Management Console zum Hinzufügen des Skripts, das beim Start ausgeführt werden soll. Dies funktionierte jedoch nicht.
  3. Hat einen HKLM-Registrierungsschlüssel verwendet, um mit der Ausführung dieses Skripts zu beginnen, wird jedoch erst gestartet, wenn wir manuell eine Remotedesktopsitzung auf dem Server öffnen.
  4. Erstellen einer geplanten Aufgabe Das aufgerufene Programm hatte keinen Zugriff auf die interaktive Windows-Sitzung.

Irgendwelche anderen Vorschläge? (Oder hat er etwas übersehen, als er einen dieser Vorschläge aufstellte?)

    
Plutor 22.05.2009, 12:17
quelle

5 Antworten

4

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:

  • Standardbenutzername
  • DefaultPassword
  • Standarddomäne
  • AutoAdminLogon

AutoAdminLogon sollte auf die Zeichenfolge "1" festgelegt werden, die anderen sind selbsterklärend.

Offensichtlich hat dies Sicherheitsprobleme groß genug, um Jupiter durch zu fliegen.

    
JimG 24.05.2009, 14:12
quelle
1

Haben Sie versucht, Ihr Skript als Windows-Dienst ausführen zu lassen, aber es mit dem Desktop interagieren zu lassen?

Speziell:

  1. Gehen Sie zur Seite mit den Serviceeigenschaften
  2. Klicken Sie auf die Registerkarte "Anmelden"
  3. Wählen Sie "Lokales Systemkonto"
  4. Aktivieren Sie die Option "Interaktion mit dem Desktop zulassen"
Jack Leow 24.05.2009 14:10
quelle
0

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.

    
BobbyShaftoe 22.05.2009 12:33
quelle
0

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.

    
Paul Nathan 24.05.2009 13:54
quelle
0

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.

    
Shrike 29.11.2010 11:06
quelle

Tags und Links