Многие люди предлагают использовать Application.Restart. На самом деле эта функция редко выполняет должным образом. Я никогда не закрывал приложение, из которого звоню. Мне всегда приходилось закрывать приложение другими способами, например закрывать основную форму.
У вас есть два способа справиться с этим. У вас либо есть внешняя программа, которая закрывает вызывающий процесс и запускает новую,
или
у вас при запуске вашего нового программного обеспечения уничтожаются другие экземпляры того же приложения, если в качестве перезапуска передается аргумент.
private void Application_Startup(object sender, StartupEventArgs e)
{
try
{
if (e.Args.Length > 0)
{
foreach (string arg in e.Args)
{
if (arg == "-restart")
{
// WaitForConnection.exe
foreach (Process p in Process.GetProcesses())
{
// In case we get Access Denied
try
{
if (p.MainModule.FileName.ToLower().EndsWith("yourapp.exe"))
{
p.Kill();
p.WaitForExit();
break;
}
}
catch
{ }
}
}
}
}
}
catch
{
}
}