Frage

Ich bin für eine inverse Version von "RunOnceEx".

RunOnceEx nicht irgendein Programm laufen, bevor die Shell des Benutzers (Desktop und die Taskleiste) starten. Der Fortschritt Login wird nicht fortgesetzt, bevor die RunOnceEx abgeschlossen.

Ich will genau das gleiche, aber auf die Abmeldung eines Benutzers tun. Wenn sie / er abzumelden, alle Programmherunterfahren laufen, so dass Shell (Desktop und die Taskleiste), dann „“ Ich habe mein Programm wünschen wird diesen Moment ausführen „“, schließlich Logout.

Ich denke, es ist möglich, weil die „mobsync.exe“ das tut. Aber ich kann nicht finden, wo und wie es zu tun.

War es hilfreich?

Lösung

dies für den aktuellen Benutzer nur ausführen kann, können Sie WMI verwenden, um eine Information zu erhalten, wenn ein shutdown / Abmeldung erfolgt.

Entweder Sie schreiben ein kleines C # (oder irgendeine andere Sprache, die WMI verwenden können) Anwendung oder vbs-Skript auf das hören Win32_ComputerShutdownEvent WMI-Ereignis.

Ein Beispiel C # App kann hier in dieser Frage zu finden: Get Abmelden Ereignis aus System

Andere Tipps

Warnung, wie gesagt hier , gpedit.msc ermöglicht es Ihnen, ein Abmeldeskript für alle Nutzer zu konfigurieren.

Wenn Sie das Skript müssen nur für einen Benutzer, müssen Sie es direkt in der Registrierung erklären, die beide in HKCU und HKLM.

in der ersten Folge auf Google für mich gefunden

Um ein Programm ausführen Sie ein Skript erstellen können, um sie auszuführen und Gruppenrichtlinien zu verwenden, um es zu erzwingen. In Gruppenrichtlinien-Editor auf Benutzerkonfiguration navigieren -> Windows-Einstellungen -> Skripts (Anmelden / Abmelden)

mehr Informationen hier

Wenn Sie ein laufendes Programm wollen Code auf Abmelde auszuführen, dann sollten Sie die WM_QUERYENDSESSION Nachricht Haken und suchen Sie nach einem lParam Wert von ENDSESSION_LOGOFF (0x80000000).

Es ist wichtig, für diesen lParam Wert zu testen, da die anderen eine „erzwungene Nähe“ zeigen - das heißt Ihr Prozess getötet werden, bevor Sie den Code selbst ausführen darf. In der Tat sind die meisten shutdown / session-End-Nachrichten nur sollen Ihnen die Möglichkeit geben, Last-Minute-Bereinigungscode zu laufen und sind nicht so sicher mit langer Laufzeit Aktionen zu reagieren; aber diese spezielle Kombination sollte in Ordnung sein.

Hinweis: Ich habe nie versucht, einen separaten Prozess in Reaktion auf die WM_QUERYENDSESSION Nachricht tatsächlich auszuführen. Es ist möglich, dass der Window-Manager dies nicht zulassen wird, wie es bei dem Herunterfahren der Fall ist. Probieren Sie es aus und sehen, glaube ich.

Wenn Sie in einer .NET-Umgebung sind (Sie hat nicht angegeben), ein schneller Weg ist, ein Event-Handler zum Microsoft.Win32.SystemEvents.SessionEnding Ereignis hinzuzufügen.

Was Sie brauchen, ist eine Implementierung von GINA . Sie können Ihre benutzerdefinierten Befehle in WlxIsLogoffOk laufen Funktion, die, wenn der Benutzer eine Abmelde aufgerufen wird, startet

Wenn Sie die richtige GINA erstellen dll Sie es hier registrieren: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\@GinaDLL

Hier ist eine Implementierung, die Ihren Anforderungen entsprechen können (es bietet eine Abmelderegistrierungsschlüssel, wo Sie Ihren Befehl angeben können): http://wwwthep.physik.uni-mainz.de/~ Frink / newgina_pre09 / readme.html

Wie VonC und TFD bereits erwähnt, ist die Gruppenrichtlinien-Editor nur ein weiterer Weg, um die Registrierung zu bearbeiten.

machen

Just mit gpedit die Änderungen (in UserConfig - Windows-Einstellungen - Scripts) Sie mögen und danach einen Blick in die Registrierung bei [HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows\System\Scripts] nehmen um herauszufinden, wie man direkt das tun kann.

Auch auf meinem PC (in einer Domäne hängend) ist ein versteckter Ordner C:\WINDOWS\System32\GroupPolicy mit Unterordner für Benutzer und Maschine. Beide haben weitere Unterordner Shutdown und Startup aufgerufen. Vielleicht können Sie auch diese hier verwenden.

Wenn Sie etwas einfach und arbeiten für einen einzelnen (oder überhaupt) Benutzer benötigen, können Sie eine einfache Anwendung in C ++ machen oder C # zum Beispiel.

Die einfachste eines C # in Schale wird mit (durch einfaches Hinzufügen der Tablett-Komponente auf die Form) und registriert und Ereignishandler für das Formclosing Ereignis. Es würde wie folgt aussehen:

    private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
        if (e.CloseReason != CloseReason.UserClosing)
        {
            // It's not the user closing the application,
            // Let's do whatever you want here, for example starting a process
            Process notePad = new Process();

            notePad.StartInfo.FileName   = "notepad.exe";
            notePad.StartInfo.Arguments = "ProcessStart.cs";

            notePad.Start();
        }
    }

So Ihre Anwendung unter Windows oder mit dem Benutzer gestartet werden. Es würde warten (ein wenig Speicher verwendet wird) und wird etwas tun, wenn das System heruntergefahren oder der Benutzer abmelden, usw. (durch „CloseReason“ oben-Kontrolle).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top