본문 바로가기

C, C++, C#

[C#]셀프 프로세스 재실행

반응형

안녕하세요. 이번 포스팅은 자신의 프로세스를 Kill 후 실행시키는 기능을 구현했습니다.

 

개발을 하다보면 버그 또는 특정한 로직에 따라서 프로세스를 Kill하고 다시 실행되야되는 경우가 있습니다.

 

당연히 타 프로세스라면 어렵지 않지만 Self로 프로세스를 다시 살려야 되는 경우가 있었습니다.

 

Self 프로세스를 Kill 후 Start 하는 방법에 대하 고민하다가 윈도우 배치파일을 이용한 방법을 적용했습니다.

 

 

using System;
using System.Collections.Generic;
using System.IO;

class Solution {
    static void Main(String[] args) {
        
        MakeBatchFile("BatchTest.exe", "BatchFile.bat");
        StartBatch("BatchFile.bat");
    }
    
    
    static void StartBatch(string strBatchName)
    {
        //! 배치파일 실행
        System.Diagnostics.Process.Start(strBatchName);
    }
    
    
    static void MakeBatchFile(string strProcessName, string strMakeBatchName)
    {
        string strPath = Environment.CurrentDirectory + "\\" + string.Format("{0}", strMakeBatchName);
        
        //! 배치파일 생성하기
        FileStream strem = File.Create(strPath);
        strem.Close();
        string strBatch = "";
        strBatch += string.Format("@echo off \n");
        strBatch += string.Format("taskkill /IM {0} /f \n", strProcessName);
        strBatch += string.Format("start /d \"{0}\\\" /b {1} \n", Environment.CurrentDirectory, strProcessName);
        
        //! 배치파일 내용 작성
        if(File.Exists(strPath))
        {
            File.WriteAllText(strPath, strBatch);
        }
    }
}

 

 

1. StartBatch : 배치파일을 실행해 줍니다.
2. MakeBatchFile : 필요한 배치 파일을 만들어줍니다.

   - 배치 파일 기능 중 taskkill을 적용하였고 옵션으로 /IM과 /f 를 적용했습니다.

   - IM : 종료할 프로세스의 이름 지정

   - /f : 강제종료

 

taskkill의 매개변수는 는 아래 그림과 같습니다.

출처 : https://learn.microsoft.com/ko-kr/windows-server/administration/windows-commands/taskkill

 

 

반응형