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;
4

1 に答える 1

2

本当の「解決策」はありませんが、回避策...

実行中のプログラムで特別な起動パラメータの処理を実装する

そのパラメーターで開始された場合、プログラムはすべての通常の起動をスキップし、実行中のインスタンスで待機中の名前付きパイプ/手動リセット イベントに接続し、そのインスタンスをシャットダウンするようにメッセージを送る必要があります。

あなたのセットアップから、あなたがする必要があるのは、その特別なパラメータでプログラムを開始することだけです

于 2012-11-19T15:58:45.073 に答える