WinForm 시작프로그램 등록 및 실행관련 질문 드립니다.

.NET Framework 4.8, WinForm으로 업무에 필요한 간단한 프로그램을 만들었습니다.
실행 프로그램 - self.exe
업데이트 프로그램 - update.exe

프로그램 실행 시 SOFTWARE\Microsoft\Windows\CurrentVersion\Run 여기에 레지스트리 등록하여 윈도우 시작 시 자동 실행이 되도록 하였습니다.

self 폼에서 UPDATE 버튼을 클릭하면 버전 체크 후 같은 폴더에 있는 update.exe 파일 실행되고 업데이트가 끝나면 update 폼은 닫히고 self.exe 파일을 다시 실행하는 구조입니다.

문제는 시작프로그램으로 실행 된 self 폼에서 update를 하게 되면 update 폼이 켜졌다가 바로 꺼져버립니다. 시작 프로그램이 windows\system32에서 실행이 되서 그런가 의심이 되긴 한데 정확한 원인을 못찾겠습니다.

시작프로그램으로 실행 된 self를 끄고, 그냥 다시 실행하면 업데이트는 정상적으로 작동합니다.
문제 해결을 할 수 있게 도움 부탁드립니다.

self.exe가 update.exe를 어떻게 실행하나요?
만약 ProcessStartInfo 로 실행한다면 실행시 경로를 지정해줄 수 있습니다.

ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = @"C:\Update\update.exe";
startInfo.WorkingDirectory = @"C:\Update";

Process process = new Process();
process.StartInfo = startInfo;
process.Start();

위에 WorkingDirectory 를 지정해서 경로를 지정할 수 있습니다.

실행경로는 프로그램 실행 된 경로를 가지고 실행하고 있습니다.
시작프로그램 실행 시 windows\system32에서 실행되서 그런가해서 절대경로로 해봤으나 똑같은 증상이 발생합니다.

string directory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
string launcherPath = Path.Combine(directory, "Update.exe");

Process.Start(launcherPath);

원인이 여러가지 있을수 있겠지만
원인을 찾는 방법은 크게 2가지가 있습니다.

  1. 디버깅
    타 프로그램에 의해 실행 되는 update.exe 시작 부분에
    sleep 을 30초 정도 줍니다. (필요시 더)
    그리고 자동실행으로 실행 시키고 vs를 켭니다.
    그 상태에서 update 를 실행 시키고
    vs의 debug attach 기능을 통해서 update 프로세서를 디버깅 합니다.

  2. 로그 분석
    특별한 상황으로 디버그를 할수 없다면 혹은 release 모드만 써야 한다면
    debugview 를 활용 할 수 있습니다.
    DebugView - Sysinternals | Microsoft Learn
    프로그램 내부에 로그를 추가 해서 어떤 상황에서 프로그램이 종료 되는지 확인 합니다.

using System.Diagnostics;

namespace ConsoleApp2;

internal class Program
{
	static void Main(string[] args)
	{
		Debug.WriteLine("[Filter] Debug Message");
		Trace.WriteLine("[Filter] Trace Message");
    }
}

위 코드를 debug 모드와 release 모드로 빌드 하여
debugview 를 켜고 실행 시키면 다음과 같습니다.

image

메세지 앞에 [Filter] 라고 적어 주는건 다른 프로그램의 메세지를 걸러 주기 위함 입니다.

위 두가지 방법으로 종료 되는 원인을 찾아 수정 하시면 될거 같습니다.

윗분 말씀 처럼 디버깅 해보는게 제일 좋을것 같네요…

일단 켜지긴 하는것 같으니 경로 문제는 아닐것 같구요
디버그 모드 에서는 안잡히는게 간혹 있을수 있으니
update폼이 Load 되고 무슨일 하는지 어디 까지 실행 되는지 로그 라도 찍어 보세요
체크 루틴에 따라 종료 되는 로직이 있는지도 봐야 할거구요
관리자 권한은 필요 없는지도 체크 해봐야 합니다.

DebugView 라는게 있었는지도 몰랐네요.
self폼이 꺼지고 update폼이 켜지는 구조라 디버그가 안되서 답답 했었는데
이걸로 테스트 해보겠습니다.
감사합니다.