2012-11-18 2 views
0

Windows Seven의 고급 설치 프로그램에서 C#으로 작성된 실행중인 응용 프로그램으로 사용자 지정 메시지를 보내려고합니다.
불행히도이 메시지는 C# 응용 프로그램에서는 수신되지 않습니다.
설치 프로그램과 앱이 다른 사용자로 실행 중이므로이게 맞습니까? 어떻게 해결할 수 있습니까? 두 명의 서로 다른 사용자 간의 브로드 캐스트 메시지

쉽게를 만들려면 :

// --- C# code --- 

    private const int WM_CUSTOM_CLOSE = 0x400 + 0x500; 
    private const int CUSTOM_CLOSE_WPARAM = 0x1; 
    private const int CUSTOM_CLOSE_LPARAM = 0x2; 

    protected override void WndProc(ref Message m) 
    { 
     if (m.Msg == WM_CUSTOM_CLOSE) 
     { 
      int wp = m.WParam.ToInt32(); 
      int lp = m.LParam.ToInt32(); 
      if (wp == CUSTOM_CLOSE_WPARAM && lp == CUSTOM_CLOSE_LPARAM) 
      { 
       Debug.WriteLine("Close application"); 
       Close(); 
      } 
     } 
     base.WndProc(ref m); 
    } 

// --- INNO SETUP code --- 

    const 
     WM_USER = $400; 
     WM_CUSTOM_CLOSE = WM_USER + $500; 
     WM_CUSTOM_WPARAM = $1; 
     WM_CUSTOM_LPARAM = $2; 
    function InitializeSetup(): Boolean; 
    begin 
     SendNotifyMessage(HWND_BROADCAST, WM_CUSTOM_CLOSE, 
         WM_CUSTOM_WPARAM, WM_CUSTOM_LPARAM); 
    end; 
+0

비슷한 문제가 있습니다. 해결 방법은 다음과 같습니다. 프로그램 간 통신을 위해 이름이 지정된 파이프가 이미 열려 있습니다. 거기에 제어 메시지를 추가하여 내 응용 프로그램을 닫습니다 ... inno-setup에서 설치 한 prog exe를 전체 응용 프로그램을 시작하지 않고 이름이 지정된 파이프에 연결하고 종료 할 다른 인스턴스에 알려주는 param으로 호출합니다. – DarkSquirrel42

+0

@ DarkSquirrel42 : 예제를 게시 할 수 있습니까? Inno Setup의 이름이 붙여진 파이프는 나를위한 악몽입니다. 감사합니다 – Marco

+0

또한 내 응용 프로그램에서 만든 수동 재설정 이벤트를 사용하여 설치 프로그램에서 설정, 생각했지만 InnoSetup OpenEvent를 사용하는 방법을 모르겠습니다 ... – Marco

답변

2

진짜 "솔루션"하지만 해결 ...

가 실행중인 음식물

에 특별한 시작 매개 변수에 대한 처리를 구현하는 시작하는 경우 해당 매개 변수는 프로그램이 모든 정상 시작을 건너 뛰고 실행중인 인스턴스에서 대기중인 명명 된 파이프/수동 재설정 이벤트에 연결하고 해당 인스턴스를 종료 할 때까지 메시지로 보냅니다.

을 설치 한 다음 해당 특수 매개 변수를 사용하여 프로그램을 시작하면됩니다.

관련 문제