@ lazyberezovsky가 맞습니다. 명령 줄에서 응용 프로그램을 다시 호출하면 관련이없는 다른 프로세스가 생성되고 새 프로세스가 호출되기 전에 프로세스 매개 통신을 통해 이전에 실행중인 응용 프로그램 인스턴스로 새 매개 변수를 전달해야합니다.
IMHO,이 두 프로세스간에 통신하는 가장 쉬운 방법은 Windows 레지스트리를 사용하는 것입니다. Windows 레지스트리는 이미 스레드로부터 안전하며 API는 매우 간단합니다.
먼저 응용 프로그램이 실행될 때 주 양식을 표시하기 전에 perform a check to see if another instance of the app is running이 표시됩니다.
false 인 경우 응용 프로그램이 처음 실행되며 명령 줄을 처리하고 양식을 일반 텍스트로 표시합니다. 또한 프로세스 간 통신에 사용되는 레지스트리 키를 지울 것입니다 (아래 참조).
사실이면 프로세스 간 통신을 위해 사용될 특정 키의 명령 줄을 registry에 저장 한 다음 주 폼을 표시하지 않고 응용 프로그램을 종료합니다.
실행중인 응용 프로그램 (첫 번째 인스턴스)은 새 명령 줄이 예상되는 레지스트리 키를 정기적으로 검사하는 폴링 메커니즘 (매초마다 한 번씩 Windows 타이머를 실행할 수 있음)을 시작해야합니다. 일반적으로 빈 문자열을 찾고 아무 것도하지 않지만 검색된 값이 비어 있지 않으면 사용자가 다른 매개 변수 집합을 사용하여 응용 프로그램을 다시 생성한다는 것을 의미합니다. 그런 다음 명령 줄을 디코드하고 창을 다시 칠할 수 있습니다 필요에 따라 그런 다음 레지스트리 항목을 다시 지워야 폴링 메커니즘이 다시 시작되어 사용자가 다음에 응용 프로그램을 호출 할 때이를 감지합니다.
명명 된 파이프, WCF, .remoting 또는 TCP 소켓은 사용할 수 있고 폴링 메커니즘을 필요로하지 않을 수도있는 IPC 메커니즘이며 일부는 이에 의해 훼손 될 수 있습니다. ;)
희망이 도움이됩니다!
자세한 내용을 입력하십시오. 예를 들어 창문이라고 부르는 방법에 대한 예입니다. –
http://www.hanselman.com/blog/TheWeeklySourceCode31SingleInstanceWinFormsAndMicrosoftVisualBasicdll.aspx –
@ HansPassant의 제안 +1 IMHO이 답변으로 게시되어 투표 한 사람이어야합니다.)) –