2009-04-03 7 views

답변

2

Process.Start을 사용하여 업데이터를 시작하고 메인 프로그램이 종료 될 때까지 기다릴 수 있습니까? 나는 이것이 가장 쉬운 해결책이라고 생각한다.

또는 주 응용 프로그램을 시작하기 전에 업데이트 및 업데이트를 확인할 별도의 시작 프로그램이있을 수 있습니다. 그러나 런처를 업데이트해야하는 경우에도 이와 동일한 문제가 발생합니다. 이의 라인을 따라


:

static void Main(string[] args) 
{ 
    var haveToUpdate = ...; 
    if (haveToUpdate) 
    { 
    Process.Start("update.exe"); 
    Environment.Exit(0); 
    } 
} 

static void Main(string[] args) 
{ 
    var processes = Process.GetProcessesByName("program.exe"); 

    if (processes.Length > 1) 
    throw new Exception("More than one program.exe running"); 
    else if (processes.Length == 0) 
    Update(); 
    else 
    processes[0].Exited += new EventHandler(Program_Exited); 
} 

static void Program_Exited(object sender, EventArgs e) 
{ 
    Update(); 
} 

static void Update() 
{ 
    // ... 
} 
+0

코드에 버그가 있습니다. "program.exe"라는 두 프로세스가 실행중인 경우 업데이트 할 프로세스가 종료되고 잘못된 프로세스를 기다리고 있습니다. 프로세스 이름에 따라 대기하는 것을 피할 것입니다. 두 프로세스 간의 어떤 종류의 의사 소통은 아마도 더 좋을 것입니다. –

+0

짧은 지연과 함께 명명 된 세마포어 일 수 있습니다. 또는 실행 파일을 쓰기 위해 열 수 있는지 반복해서 확인하십시오. –

+0

예외 부분을 놓치셨습니까? 물론보다 견고한 코드를 원할 수도 있지만 이것은 개념 일뿐입니다. – Samuel

-2

는 응용 프로그램 종료 전에 업데이트 실행 파일을 실행합니다.

0

다른 작은 업데이트 응용 프로그램이 필요합니다. Process.Start()로 시작하면이 도우미 프로세스가 실행 파일을 대체하고 Process.Start()로 새 도우미를 다시 시작합니다.

3

역순으로 수행하십시오. 이전 응용 프로그램 (임시로 저장)을 사용하여 전체 업데이트 된 파일을 가져온 다음 프로세스 시작을 사용하여 업데이터 응용 프로그램을 시작합니다. 모든 업데이트는 새 파일을 이전 파일로 복사 한 다음 응용 프로그램을 다시 시작해야합니다.

업데이터는 액세스가 거부 된 예외를 포착하고 응용 프로그램을 복사 할 수있게 될 때까지 기다릴 수 있습니다. 복사가 완료되면 일시적으로 새 파일을 삭제하고 종료하기 전에 응용 프로그램을 다시 시작합니다.

그런 다음 필요한 경우 업데이트 프로그램을 업데이트 할 수 있습니다 (일반 응용 프로그램 사용).