【问题标题】:How to trigger an already running .net based windows application?如何触发已经运行的基于 .net 的 Windows 应用程序?
【发布时间】:2009-05-11 16:30:22
【问题描述】:

我有一个在内存中运行的基于 .net 的 Windows 应用程序。我想从不基于 .net 的外部应用程序触发应用程序中的功能之一。我怎样才能做到这一点?触发应该是实时的。

【问题讨论】:

    标签: c# .net windows winforms


    【解决方案1】:

    让第一个应用侦听 TCP 端口。使第二个应用程序连接到 TCP 端口并发送“WAKE UP LAZY PROGRAM”。通过做某事让第一个应用对此做出响应。

    【讨论】:

      【解决方案2】:

      使用套接字会起作用。 命名管道也可以使用。

      【讨论】:

        【解决方案3】:

        如果程序不是 .net,我建议发送或设置窗口消息:请参阅 PostMessageRegisterWindowMessage。要在 .net 程序中接收这样的消息,我认为您可能需要 PInvoke RegisterWndowMessage,并覆盖您的 WndProc

        另一个很好的可能性是共享一个命名的互斥体。

        您应该定义“实时”的含义:一方面,在 Windows 上没有什么是实时的,另一方面,当您开始放弃这一点时,改为说“几乎实时”或“软实时”然后许多解决方案成为可能。

        【讨论】:

        • +1 用于共享命名事件,只要应用程序在同一台机器上运行,这将非常简单。 (你说互斥体,但我认为你的意思是事件)
        【解决方案4】:

        您不能将 XML 消息字符串发送到正在从非 .net 应用程序侦听特定端口的 .net 应用程序。通过分析此 XML 消息,您可以调用 .net 应用程序中的特定函数。

        一个疯狂的猜测。

        谢谢 123开发者

        【讨论】:

          【解决方案5】:

          消息传递可能是要走的路。使用套接字也可以,但是

          a) 可能会引发安全漏洞,并且

          b) 可能是某些机器上的防火墙软件存在问题。

          【讨论】:

            【解决方案6】:

            CodeProject 有一个使用 .NET Remoting / IPC 的示例:

            Single Instance Application, Passing Command Line Arguments

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2011-11-05
              • 1970-01-01
              • 1970-01-01
              • 2018-11-17
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多