Это не всегда работает (это зависит от того, как программа загружается сама), но обычно вы можете создать командный файл следующим образом:
@Echo off
:Start
NotePad
echo Program terminated at %Date% %Time% with Error %ErrorLevel% >> c:\logs\program.log
echo Press Ctrl-C if you don't want to restart automatically
ping -n 10 localhost
goto Start
Я использовал Блокнот в качестве примера.
Линии
echo Press Ctrl-C if you don't want to restart automatically
ping -n 10 localhost
Это просто задержка (10 секунд), чтобы дать пользователю возможность прервать процесс до его повторного запуска.
Линия
echo Program terminated at %Date% %Time% with Error %ErrorLevel% >> c:\logs\program.log
не требуется, но будет регистрировать каждый раз, когда программа была закрыта для файла, поэтому может быть полезно диагностировать проблему. ErrorLevel может не сказать вам много, но программа должна возвращать 0, если она нормально закрылась, и не нулевое сообщение, если оно не
Обратите внимание, вы упоминаете, что ваша программа ничего не делает, если она уже запущена. Обычно это означает, что приложение запускается, обнаруживает, что другая копия уже запущена, и немедленно завершает работу. Если это так, и ваша программа запускается до запуска этого пакетного файла, то пакет будет зацикливаться и пытаться запускать вашу программу каждые десять секунд.