Führen Sie ein Programm beim Windows-Start nur einmal aus

524
user1578653

Wir haben ein Programm, das auf einem Server installiert ist und immer ausgeführt werden sollte. Es ist jedoch wichtig, dass nur eine Instanz davon ausgeführt wird. Wir haben einen Registrierungsschlüssel in 'HKEY_LOCAL_MACHINE / SOFTWARE / Microsoft / Windows / CurrentVersion / Run' hinzugefügt, damit er beim Start ausgeführt werden kann.

Es tritt jedoch ein Problem auf, wenn sich mehrere Benutzer über den Remote-Desktop am Server anmelden. Für jeden Benutzer wird eine Instanz gestartet. Wie können wir es so einrichten, dass es nur einmal startet, egal wie viele Benutzer angemeldet sind?

2
Verwenden Sie eine Batchdatei (cmd), die überprüft, ob sie bereits ausgeführt wird. Wenn es läuft, dann beenden Sie das Programm ansonsten. DavidPostill vor 9 Jahren 2
Wie @DavidPostill sagt, verwenden Sie ein Skript. Ändern Sie Ihre Laufregistrierung so, dass sie auf Ihr Skript zeigt, das überprüft wird. Im Idealfall sollten Sie sich jedoch nicht mit der Registrierung beschäftigen. Windows verfügt über nützliche Tools namens Scheduled Tasks, die so eingestellt werden können, dass sie ausgeführt werden, wenn sich ein Benutzer anmeldet. Kinnectus vor 9 Jahren 1
Fügen Sie das Programm als Dienst hinzu - weisen Sie dann einen Anmeldebenutzer zu und legen Sie den Starttyp als automatisch fest Jay vor 9 Jahren 0
Vielen Dank an alle für Ihre Beiträge - Sie haben mir geholfen, eine anständige Lösung zu finden (siehe Antwort für Details). user1578653 vor 9 Jahren 0

1 Antwort auf die Frage

0
user1578653

Danke an @DavidPostill für die richtige Richtung.

Ich habe eine Batch-Datei wie vorgeschlagen erstellt und dabei die folgende Frage zu Stackoverflow als Grundlage verwendet: https://stackoverflow.com/questions/162291/how-to-check-if-a-process-isrunning-via-a- Batch-Skript

Folgendes habe ich mir ausgedacht:

SETLOCAL EnableExtensions set EXE=MyProgram.exe FOR /F %%x IN ('tasklist /NH /FI "IMAGENAME eq %EXE%"') DO IF %%x == %EXE% goto FOUND start C:/path/to/MyProgram.exe :FOUND 

Ich habe dann den Registrierungseintrag so geändert, dass er auf diese Batchdatei und nicht auf die ausführbare Datei verweist.