两个不同用户之间的广播消息

时间:2012-11-18 14:39:41

标签: c# inno-setup broadcast sendmessage

我正在尝试从提升的设置(在Windows 7上)向使用C#编写的正在运行的应用程序发送自定义消息。
不幸的是,在C#app中从未收到此消息 这是因为设置和应用程序在不同的用户下运行? 我该如何解决这个问题?

为了方便起见:

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

1 个答案:

答案 0 :(得分:2)

没有真正的“解决方案”,而是一种解决方法......

在正在运行的prog

中实现特殊启动参数的处理

如果以该参数启动,程序应跳过所有正常启动并连接到正在运行的实例中的等待命名管道/手动重置事件,并将该实例发送给关闭消息

从您的设置中,您需要做的就是使用该特殊参数启动程序