Frage Starten Sie das Programm beim Start des Computers, wenn niemand angemeldet ist und zeigen Sie das Fenster an, wenn sich jemand anmeldet (Betriebssystem: Windows)


Ich habe ein Programm, das beim Systemstart mit Taskplaner auf Windows Server 2012 gestartet wird. Das Programm muss starten, auch wenn der Computer automatisch neu gestartet wird.

Administrator ist das Konto, das zum Starten des Programms verwendet wird. Die Option "Ausführen ob Benutzer angemeldet ist oder nicht" ist für die Aufgabe aktiviert.

Das Problem dabei ist, dass wenn jemand sich als Administrator über Remote Desktop Connection anmeldet, die Schnittstelle (Programmfenster) ausgeblendet ist.

Wie ich es verstehe, 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 in ihrem Scheduler erlaubt. Kann ich ein VBScript oder etwas erstellen, das beim Start ausgeführt wird und das Programm startet, das dann angezeigt wird, wenn sich der Benutzer tatsächlich anmeldet?

Andere Ideen?

(Ich möchte übrigens kein separates GUI-Programm erstellen, das sich übrigens mit dem ursprünglichen Programm verbindet. Ich würde es auch bevorzugen, wenn ich das bereits laufende Programm nicht nach der Benutzeranmeldung beenden und dann starten muss es wieder.)


18
2018-03-20 19:32


Ursprung


Firedaemon, installieren Sie die App als Dienst, wenn RDP in wechseln zu "Sitzung 0" mit Firedaemon. Siehe die App. - TheCleaner
Dies könnte technisch geschehen, wenn Sie Ihren eigenen Service entwickeln. - Ryan Ries
Beantwortete gerade meine eigene Frage. Ich kann jedoch meine eigene Antwort für zwei Tage nicht akzeptieren, weil das System hier bei serverfault.com extrem schlecht ist (die meisten Leute würden jetzt diese Seite einfach verlassen, ohne zwei Tage zu warten und die Frage für immer als ungelöst markiert zu belassen). - Marcus
@Marcus: Die Grenzen, wer wann was tun darf, sollen bestimmte Missbräuche stoppen. Unglücklicherweise verursachen sie manchmal Unannehmlichkeiten für echte Versuche, etwas richtig zu machen, aber manchmal müssen solche Kompromisse gemacht werden. Wenn Sie einen Vorschlag haben, der die Situation verbessern könnte (indem Sie die Seite mindestens genauso schützen, aber echte Nutzer weniger belästigen), wäre es besser, den Gedanken über eine relevante "Meta" -Seite (meta.serverfault.com, meta.stackoverflow.com) anstatt sich in einem Kommentar zu beschweren, dass die Seitenläufer sehr unwahrscheinlich sind. - David Spillett
Wie Sie aus der Abstimmung sehen können, ist die Antwort, die Sie akzeptieren möchten, nicht die, die von den Leuten befürwortet wird, weil die Art, wie Sie dies versuchen, zu Beginn falsch ist. - JamesRyan


Antworten:


Ich habe herausgefunden, wie ich es selbst machen kann. Es ist eine Art Workaround, aber das habe ich erwartet.

Halt! Noch nicht zusammenzucken. Weiter lesen...

  • Führen Sie es aus, und legen Sie es so fest, dass sich der Administrator automatisch anmelden sollte.

  • Erstellen Sie eine Aufgabe in Taskplaner. Legen Sie fest, dass es nur ausgeführt wird, wenn der Benutzer (Administrator) angemeldet ist. Trigger ist "bei Anmeldung" und gibt an, dass dies nur der Fall ist, wenn sich der Administrator anmeldet.

  • Erstellen Sie eine zweite Aufgabe. Nur ausführen, wenn der Benutzer angemeldet ist, bei der Anmeldung des Administrators auslösen. Die Aktion sollte "start a program" sein und das Programm "C: \ Windows \ System32 \ rundll32.exe" mit dem Argumentfeld "user32.dll, LockWorkStation".

Was passiert jetzt, wenn Sie den Computer neu starten, dass sich der Administrator automatisch anmeldet, das zu startende Programm gestartet wird und die Workstation gesperrt wird. Wenn ich mich über die Remotedesktopverbindung anmelde, kann ich das Programmfenster sehen und die GUI verwenden. Ich kann den Computer problemlos sperren / entsperren und die Verbindung trennen / wieder herstellen, wie es mir gefällt. Es gibt kein Problem, wenn ich entweder zum Server gehe und mich an der eigentlichen Workstation anmelde. Da der Administrator bereits in der Aufgabe angemeldet ist, wird er nicht mehr ausgeführt (er erstellt keine unendliche Log-in-Lock-Schleife, aus der Sie nicht ausbrechen können).

So einfach ist das. Zugegeben, es gibt eine Sekunde, bevor der Computer nach der automatischen Anmeldung gesperrt wird, und ich denke, ein Pro-Hacker mit physischem Zugriff auf den Computer könnte während dieses Zeitfensters etwas hinterhältig machen, aber in meinem Fall kann ich dieses Sicherheitsrisiko übersehen. Solange ich keine Pro-Hacker in mein Haus lasse und ihnen den Computer zeige, sollte das System relativ sicher sein. Vor allem gibt es nicht so viel Wert auf dem Computer, der Super-Tresor-Schutz benötigt, also bin ich ziemlich glücklich mit dieser Lösung.


25
2018-03-20 23:37



Keine Respektlosigkeit (oder Downvote), Marcus. Aber wenn das wirklich die Art von Antwort ist, nach der Sie gesucht haben, wäre diese Frage passender für Sie gewesen Superbenutzer. - Ryan Bolger
Es war nicht leicht zu entscheiden, welchen Stack-Tausch man machen sollte. - Marcus
Hallo Marcus, ich habe deine Antwort befolgt, aber ich habe Probleme, zwei Programme mit GUI zu starten, anstatt nur eines. Ich habe eine Frage gestellt SuperUser. Wenn Sie es dort beantworten können, wird es eine große Hilfe sein - superuser.com/questions/902386/ ... - user2162550
Das jetzt auch ablehnen, weil es keine Antwort auf die Frage ist. Die Frage definiert explizit, dass Mittag angemeldet ist - und Ihre "Lösung" macht hier eine automatische Anmeldung (so dass jemand eingeloggt ist). Vielleicht nicht schlaue Formel in der Frage, aber die Frage ist so wie sie ist. - TomTom
@ TomTom Als Option für einen Endbenutzer "Ausführen, ob Benutzer angemeldet ist oder nicht" könnte sicherlich bedeuten "Sie müssen nicht hier sein, um zu babysitten, um sicherzustellen, dass es beginnt." - Aryeh Leib Taurog


Ich habe ein Programm, das beim Systemstart mit Taskplaner auf Windows Server gestartet wird   2012. Das Programm muss auch starten, wenn der Computer automatisch neu startet.

Warum machen Sie es nicht zu einem Systemdienst, wie die Windows-Spezifikationen definieren?

Wie kann ich das lösen?

Du kannst nicht. Hintergrundprogramme sollen nicht mit der Benutzeroberfläche interagieren. Oder: Die Benutzeroberfläche sollte ein eigenes Programm ausführen, das sich dann mit dem Dienst verbindet. Die Benutzeroberfläche, die im Benutzerbereich des angemeldeten Benutzers ausgeführt wird, übernimmt die Präsentation, der Windows-Dienst führt die Verarbeitung aus. So ist das Modell für vielleicht 15 Jahre oder so konzipiert.

Ich bin ziemlich überrascht, dass Microsoft eine solche Einschränkung in ihrem Scheduler erlaubt.

Ich bin mehr überrascht, dass Sie sich nie gefragt haben, warum.

Es gibt mehrere Probleme:

  • Wenn mehrere Personen angemeldet sind, wer erhält die Benutzeroberfläche?
  • Wenn der Benutzer sich abmeldet, beenden Sie das Programm? AUTSCH.
  • Sicherheit. Das Hintergrundprogramm kann unter eingeschränkten Rechten laufen - wenn die Benutzeroberfläche dem Benutzer zugänglich gemacht wird, bedeutet dies, dass der Benutzer dort Code ausführen kann. Das Windows-Messaging-Modell ist - ah - voll mit Problemen.

Ich möchte kein separates GUI-Programm erstellen müssen, das eine Verbindung zum Original herstellt   Programm übrigens.

Weder ich noch Microsoft 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 zu integrieren - verwenden Sie sie oder nicht. Aber wenn nicht, verpasse keine Sicherheitsfragen, die du gestellt hast.


16
2018-03-20 19:38



Amen. Ich wünschte, mehr App-Anbieter würden dieses Konzept verstehen. - Ryan Bolger
Wow, bist du nicht hochnäsig in deiner Einstellung? Nun, ich denke, ich habe kein Glück. Wenn du nicht falsch informiert bist und jemand einen Weg hat, dies zu lösen, kann nicht jeder alles wissen, so dass du mit dem absoluten "du kannst nicht" Teil deines Beitrags falsch liegen magst. Ich möchte die Frage noch einige Zeit offen lassen, nur für den Fall, dass jemand einen ungewöhnlichen Workaround hat. Sonst werde ich deine Antwort akzeptieren. - Marcus
Wow aren't you snooty in your attitude. - Marcus trifft TomTom ... TomTom trifft Marcus. - TheCleaner
Wenn du wirklich dorthin gehen willst, kannst du die Schritte ausprobieren coretechnologies.com/WindowsServices/FAQ.html#GUIServices - Ich bin mir nicht sicher, ob sie immer noch in aktuellen Fenstern funktionieren, aber es gibt Möglichkeiten, die Benutzeroberfläche zugänglich zu machen - und alle Sicherheitsprobleme zu öffnen. - TomTom
Downvoted für so unhöflich. - Lone Coder


Es geht nur um die Session dass Ihr Programm läuft. Wenn niemand eingeloggt ist, gibt es keine interaktive Sitzung, unter der ich glaube, dass sie unter läuft Session 0, die eine seltsame Benutzeroberfläche hat, die sich nicht wie die anderen zeigt.

Jetzt, wenn Ihr Programm erkennt wann explorer.exe startet (oder eine andere Möglichkeit, die Benutzeranmeldung zu erkennen) und hat sich auf magische Weise neu gestaltet oder einen Kindprozess mit dieser neuen Sitzungs-ID erzeugt. Dann wird jeder, der sich anmeldet, glücklich sehen, was Sie tun.


0
2018-03-20 20:45