Сделать запуск программы при запуске Windows только один раз

418
user1578653

У нас есть программа, которая находится на сервере и должна всегда работать, но важно, чтобы только один ее экземпляр работал. Мы добавили раздел реестра в HKEY_LOCAL_MACHINE / SOFTWARE / Microsoft / Windows / CurrentVersion / Run, чтобы он запускался при запуске.

Однако у нас возникает проблема, когда несколько пользователей входят на сервер через удаленный рабочий стол - экземпляр запускается для каждого пользователя. Как мы можем получить его так, чтобы он запускался только один раз, независимо от того, сколько пользователей вошли в систему?

2
Используйте пакетный файл (cmd), который проверяет, запущен ли он. Если он работает, выйдите из программы, иначе запустите программу. DavidPostill 8 лет назад 2
Как говорит @DavidPostill, используйте скрипт. Измените реестр запуска, чтобы он указывал на ваш скрипт, который проверяет. В идеале, однако, вам не следует возиться с реестром ... В Windows есть полезный набор инструментов, называемых запланированными задачами, которые можно настроить на запуск при входе любого пользователя в систему ... Kinnectus 8 лет назад 1
Добавьте программу в качестве службы - затем назначьте 1 пользователя для входа в систему и установите тип запуска как автоматический Jay 8 лет назад 0
Спасибо всем за ваш вклад - вы помогли мне найти достойное решение (подробности см. В ответе) user1578653 8 лет назад 0

1 ответ на вопрос

0
user1578653

Спасибо @DavidPostill за руководство в правильном направлении.

Я сделал пакетный файл, как было предложено, используя следующий вопрос о stackoverflow в качестве основы: https://stackoverflow.com/questions/162291/how-to-check-if-a-process-is-running-via-a- пакетный сценарий

Вот что я придумал:

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 

Затем я изменил запись в реестре, указав на этот пакетный файл, а не на сам исполняемый файл.