Ich habe ein Programm, das beim Systemstart mit dem Taskplaner unter Windows Server 2012 gestartet wird. Das Programm muss gestartet werden, auch wenn der Computer automatisch neu gestartet wird.
Administrator ist das Konto, mit dem das Programm gestartet wird. Die Option "Ausführen, ob Benutzer angemeldet ist oder nicht" ist für die Aufgabe aktiviert.
Das Problem dabei ist, dass die Benutzeroberfläche (Programmfenster) ausgeblendet wird, wenn sich jemand über die Remotedesktopverbindung als Administrator anmeldet.
Soweit ich weiß, gibt es keine Möglichkeit, dies mit dem Taskplaner zu lösen.
Wie kann ich das lösen?
Es sollte ein ziemlich häufiges Problem sein, aber ich kann nichts finden, indem ich das Netz durchsuche. Ich bin ziemlich überrascht, dass Microsoft eine solche Einschränkung im Scheduler zulässt. Kann ich ein VBScript oder etwas erstellen, das beim Start ausgeführt wird und das Programm startet, das dann sichtbar wird, wenn sich der Benutzer tatsächlich anmeldet?
Andere Ideen?
(Ich möchte übrigens kein separates GUI-Programm erstellen, das eine Verbindung zum ursprünglichen Programm herstellt. Ich würde es auch vorziehen, wenn ich das bereits ausgeführte Programm nicht bei der Benutzeranmeldung beenden und dann starten muss es wieder.)
Antworten:
Fand heraus, wie es mir geht. Es ist eine Art Workaround, aber genau das habe ich erwartet.
http://technet.microsoft.com/sv-se/sysinternals/bb963905.aspx
Halt! Erschaudere noch nicht. Weiter lesen...
Führen Sie es aus und stellen Sie es so ein, dass sich der Administrator automatisch anmeldet.
Erstellen Sie eine Aufgabe im Taskplaner. Legen Sie fest, dass es nur ausgeführt wird, wenn der Benutzer (Administrator) angemeldet ist. Der Auslöser lautet "bei Anmeldung" und gibt an, dass dies nur bei der Anmeldung des Administrators der Fall ist.
Erstellen Sie eine zweite Aufgabe. Nur ausführen, wenn Benutzer angemeldet ist, bei Administratoranmeldung auslösen. Die Aktion sollte "Programm starten" und "C: \ Windows \ System32 \ rundll32.exe" sein, wobei das Argumentfeld auf "user32.dll, LockWorkStation" gesetzt ist.
Wenn Sie den Computer jetzt neu starten, wird der Administrator automatisch angemeldet, das zu startende Programm gestartet und die Arbeitsstation gesperrt. Wenn ich mich über eine Remotedesktopverbindung anmelde, kann ich das Programmfenster sehen und die GUI verwenden. Ich kann den Computer problemlos sperren / entsperren und die Verbindung nach Belieben trennen / wiederherstellen. Es ist auch kein Problem, wenn ich zum Server gehe und mich an der eigentlichen Workstation anmelde. Da der Administrator bereits angemeldet ist, wird die Aufgabe nicht erneut ausgeführt (es wird keine unendliche Anmeldeschleife erstellt, aus der Sie nicht ausbrechen können).
So einfach ist das. Zugegeben, es dauert eine Sekunde, bis der Computer nach der automatischen Anmeldung gesperrt wird, und ich schätze, ein Profi-Hacker mit physischem Zugriff auf den Computer könnte in diesem Zeitfenster etwas Ungewöhnliches tun, aber in meinem Fall kann ich dieses Sicherheitsrisiko übersehen. Solange ich keine professionellen Hacker in mein Haus lasse und ihnen den Computer zeige, sollte das System relativ sicher sein. Vor allem ist der Wert des Computers, der einen Super-Vault-Schutz benötigt, nicht besonders hoch, daher bin ich mit dieser Lösung sehr zufrieden.
quelle
SuperUser
. Wenn Sie es beantworten könnte es wird es eine große Hilfe sein - superuser.com/questions/902386/...Warum machen Sie es dann nicht zu einem Systemdienst, wie in den Windows-Spezifikationen definiert?
Du kannst nicht. Hintergrundprogramme sollen nicht mit der Benutzeroberfläche interagieren. Oder: Die Benutzeroberfläche sollte ein eigenes Programm ausführen, das dann eine Verbindung zum Dienst herstellt. Die Benutzeroberfläche, die im Benutzerbereich des angemeldeten Benutzers ausgeführt wird, übernimmt die Präsentation, der Windows-Dienst die Verarbeitung. So ist das Modell für ungefähr 15 Jahre ausgelegt.
Ich bin mehr überrascht, dass Sie sich nie getäuscht haben, um zu fragen, warum.
Es gibt mehrere Probleme:
Weder Microsoft noch ich kümmern sich an dieser Stelle darum, was Sie tun möchten. Es gibt ein etabliertes und unterstütztes Modell, um die Hintergrundverarbeitung in eine angemeldete Benutzeroberfläche einzubinden - verwenden Sie es oder nicht. Wenn dies nicht der Fall ist, sollten Sie sich nicht über von Ihnen angesprochene Sicherheitsprobleme beschweren.
quelle
Es dreht sich alles um das
Session
, in dem Ihr Programm ausgeführt wird. Wenn niemand angemeldet ist, gibt es keine interaktive Sitzung, unter der es angezeigt werden kann. Ich glaube, sie läuft unterSession 0
einer seltsamen Benutzeroberfläche, die nicht wie die anderen angezeigt wird .Wenn Ihr Programm erkennt, wann es gestartet wird
explorer.exe
(oder auf eine andere Weise, um die Benutzeranmeldung zu erkennen) und sich auf magische Weise selbst verändert oder einen untergeordneten Prozess auf dieser neuen Sitzungs-ID erzeugt, wird jeder, der sich anmeldet, glücklich sehen, was Sie tun.quelle