К сожалению, вы не можете использовать Process.Start () для запуска экземпляра текущего запущенного процесса. Согласно документу Process.Start ():
«Если процесс уже запущен, дополнительный ресурс процесса не запускается ...»
Этот метод будет хорошо работать в отладчике VS (потому что VS совершает какое-то волшебство, которое заставляет Process.Start думать, что процесс еще не запущен), но завершится неудачей, если не будет работать под отладчиком. (Обратите внимание, что это может зависеть от ОС - я помню, что в некоторых моих тестах он работал на XP или Vista, но я просто помню, что запускал его под отладчиком.)
Этот метод в точности используется последним программистом проекта, над которым я сейчас работаю, и я довольно долго пытался найти обходной путь для этого. Пока что я нашел только одно решение, и оно мне кажется грязным и грязным: запустить второе приложение, которое ждет в фоновом режиме, пока не завершится первое приложение, а затем перезапустить первое приложение. Я уверен, что это сработает, но, блин.
Редактировать: Использование второго приложения работает. Все, что я сделал во втором приложении, было:
static void RestartApp(int pid, string applicationName )
{
// Wait for the process to terminate
Process process = null;
try
{
process = Process.GetProcessById(pid);
process.WaitForExit(1000);
}
catch (ArgumentException ex)
{
// ArgumentException to indicate that the
// process doesn't exist? LAME!!
}
Process.Start(applicationName, "");
}
(Это очень упрощенный пример. Реальный код имеет множество проверок работоспособности, обработки ошибок и т. Д.)