是否可以连接或调用现有进程?
Posted
技术标签:
【中文标题】是否可以连接或调用现有进程?【英文标题】:Is it possible to connect or make calls to an existing process? 【发布时间】:2010-07-15 05:09:43 【问题描述】:在 Windows 中,我目前有两个程序如下工作。程序 A 使用一些参数调用程序 B,这导致程序 B 返回一些文本然后退出。程序 A 再次使用其他参数调用程序 B,这导致程序 B 做更多的事情。
程序 B 启动时,需要进行一些耗时的加载。上述方法意味着程序 B 必须执行两次加载。是否可以只加载程序 B 一次?
例如程序 A 使用一些参数调用程序 B,这导致程序 B 返回一些文本,但程序继续运行。程序 A 再次调用相同的进程,导致程序 B 做更多的事情。
以上是否可能,也许使用某种 Windows 消息传递?程序 A 是一个 Delphi 应用程序,使用 Windows 的 CreateProcess 方法。 Program B 是一个 .NET 应用程序,它根据传入的参数执行各种操作。我知道我们可以通过将 Program B 安装为 Windows 服务来做到这一点,但如果可能的话,我想避免这种情况。
【问题讨论】:
【参考方案1】:这是用于进程间通信的技术。 .NET 有 WCF/webservices 等来做到这一点。该服务可以使用可执行文件(甚至是控制台应用程序)或作为 Windows 服务进行托管。您也可以选择网络服务器 (IIS)。
由于您的程序 B 在 .NET 中,您可以将其作为服务托管并在 Delphi 应用程序中使用。我不知道出于什么目的,您希望避免将其作为服务。但这肯定会让您占上风,而且实现起来也相当简单。
即使您使用 C/C++ 等,您也可以考虑使用 gSOAP 之类的包装器将程序 B 作为 Web 服务提供服务。
【讨论】:
我们不想使用服务,因为它增加了我们安装程序的复杂性。出于同样的原因,我们也希望避免使用 IIS/SOAP。这就是为什么我们希望有一些使用 Windows 消息执行此操作的指导。【参考方案2】:我们最终创建了具有不可见形式的程序 B,因此它可以连续运行。每当程序 A 需要完成工作时,它就会向程序 B 发送一条 Windows 消息。当程序 A 退出时,它会向程序 B 发送一条“退出”消息,程序 B 看到该消息并退出。
【讨论】:
以上是关于是否可以连接或调用现有进程?的主要内容,如果未能解决你的问题,请参考以下文章
C++ 应用程序:是不是可以将接受的 TCP 连接从一个进程传递到另一个进程?