2009-07-29 4 views
2

У меня есть C++ exe; по конкретному сценарию мне нужно остановить exe и запустить его снова. Это должно быть сделано из одного и того же exe, а не извне. Каков наилучший способ достичь этого?Перезапустить процесс [exe] в Windows

Мое предположение - начать новый экземпляр процесса, а затем убьет текущий процесс. Но есть ли какой-либо прямой API для этого, например RestartProcess() или что-то еще? Если нет, что вы предлагаете?

+0

эй ржавый, просто из интереса, почему вы сделали это сообщество wiki? – andy

+0

Было бы хорошей идеей для вас объяснить, почему вы думаете, что вам нужно это сделать - может быть лучшее и более простое решение. – 2009-07-29 11:25:28

+1

@Neil: Не знаю о ржавчине, но я иногда реализовал очень то же самое, чтобы автоматически обновлять текущее программное обеспечение без вмешательства пользователя: программа переименовывает текущий app.exe в app_old.exe, затем загружает новый .exe и записывает его на диск как app.exe, а затем вызывает CreateProcess(). При сбое старая версия все еще запускает новый app.exe, переименовывает app_old.exe в app.exe и регистрирует ошибку. При очевидном успехе он просто закрывается. Но если у вас есть лучшее решение, сообщите нам! (Я сделал это очень похоже на sharptooth explain => +1 к нему. :) – Reunanen

ответ

5

Нет, такого встроенного метода нет. Вам действительно нужно определить путь к исполняемому файлу (GetCurrentModule(), затем GetModuleFileName()), запустить новый процесс (CreateProcess()), а затем выйти из текущего процесса (ExitProcess()).

1

Используйте стандартную функцию exec. он запускает программу и не возвращается, фактически заменяя текущую запущенную программу на новую.

Смежные вопросы