728x90
Process.Start(Application.ExecutablePath); //프로그램 시작
Application.Exit(); //폼 종료
Environment.Exit(0); //콘솔 종로
Application.ExitThread();
Process.GetCurrentProcess().Kill();
구글에 검색하는 여러 프로그램 재시작 소스들....사용해봤지만 재시작이 되기는 한다.
그런데 재시작을 하면 콘솔창이 남아 있다거나...그전 프로세스가 남아있다거나 하는 그런 문제들이 생겼다.
프로그램 재시작을 하는 이유가 다른 회사에서 제공하는 SDK에서 발생하는 메모리릭은 내가 해결 할 수 없다고 판단되서 재시작 하는건데 또다른 메모리릭을 만들다니....
그래서 결국 재시작 전용 프로그램을 만들어서 재시작 하기로 했다.
(재시작 전용 프로그램을 사용 안하고 싶어서 여러 시도를 했지만 실패....)
string startProcessPath = Application.StartupPath + @"\Restarter.exe"; //시작할 프로그램
//프로그램 시작
try
{
Process.Start(startProcessPath);
}
catch (Exception ex)
{
MessageBox.Show($"시스탬을 재시작하지 못했습니다 \r\n {ex}", "에러");
}
프로젝트에 재시작 프로그램을 출력으로 추가하고 재시작 실행시 재시작 프로그램을 실행 한다.
string exitProcess = "exitTarget"; //종료시킬 프로그램
string startProcessPath = Application.StartupPath + @"\startTarget.exe"; //시작할 프로그램
//프로그램 찾아서 종료
Process[] process = Process.GetProcessesByName(exitProcess);
if (process.GetLength(0) > 0)
{
process[0].Kill();
}
//프로그램 시작
try
{
Process.Start(startProcessPath);
}
catch (Exception ex)
{
MessageBox.Show($"시스탬을 재시작하지 못했습니다 \r\n {ex}", "에러");
}
//본 프로그램 종료
Application.Exit();
재시작 프고그램에서 정해진 프로그램을 종료하고 정해진 시작 프로그램을 실행후 자기 자신을 종료 한다.
좀 번거롭긴 하지만 여러 시도를 해본결과 제일 깔끔하게 재시작이 되었다.
딱 수동으로 프로그램 종료하고 다시 시작하는 것고 동일 한것 같다.
728x90
'C#' 카테고리의 다른 글
C# / 원그래프, 차트, PieChart 그리기. (0) | 2021.12.17 |
---|---|
C# / 메세지박스 논 블로킹 실행하기 / Non-blocking MessageBox (0) | 2021.11.11 |
C# / ScreenRecorderLib.dll Fody 사용시 에러 해결 하기 (0) | 2021.10.21 |
C# / Panel 에 추가된 UserControl 제거시 Memory leak 디버깅 (0) | 2021.10.05 |
C# / UserControl Close Event / 유저컨트롤 닫힘 이벤트 (0) | 2021.10.05 |