.NET访问和控制外部应用程序的变量和方法

时间:2015-10-15 00:54:06

标签: .net winforms external

我需要帮助确定这是否可行。我要申请; app1和app2。 app1是主应用程序,app2是一个帮助应用程序(启动服务,在机器启动时启动app1并确保app1始终运行)。

我有没有办法将这两个应用程序编写到哪里,如果app2检测到某个事件,它可以连接到当前运行的app1并触发其中一个方法?我可以从app2访问/修改app1的任何变量吗?

我看起来相当广泛,但最接近我的答案是按下按钮或更改文本的Win32 / API FindWindow选项。我认为这不是我想要的。

我想要的是什么?

感谢任何帮助,谢谢!

1 个答案:

答案 0 :(得分:1)

有许多方法可以在具有不同权衡的应用程序之间进行通信。

在另一个线程Interprocess Communications (IPC)中讨论的两个应用程序在Windows操作系统中相互通信的最常见和首选方法可能是here。仅此一项就可以为您提供多种不同的选项,RPCPipesWinsock,我也会将WCF归为此类。

您还可以诉诸于操纵文件并使用FileSystemWatcher或为Registry watching创建类似的解决方案。

但是,这些解决方案都不允许您改变应用程序数据或直接调用方法。有可能你真的不需要这个,因为任何通信机制都允许你通过更好定义的API间接地改变程序状态。这是抽象的基本思想。

您可以从技术上利用Process类或可能AppDomain,并通过Reflection提出解决方法。这不是您正在寻找的,维护也很麻烦。不过,了解这些技术是为了其他目的。以下是有关该主题的一些有趣帖子:Cross AppDomain CallExample use of AppDomainExample use of Processanother handy type to look at

还有另一种方式,虽然对你的情况有点过分,但为了完整性我还是会提到它。您可以编写Kernel Mode个应用程序。这主要是因为您想要与新硬件接口,即使在这种情况下,仍然可以在用户模式下编写某些驱动程序。如果您要深入到内核模式应用程序开发中,您不再生活在虚拟地址空间的安全区域中,如果您犯了一个错误,您不再崩溃您的程序,您将蓝屏操作系统。在开发过程中,最好使用硬盘克隆实用程序(如Clonezilla)从干净的平板开始,如果您确实使用了操作系统。您还需要熟悉其他内核模式调试工具,这有点超出范围。

<强>摘要

我发现这些方法在技术上都没有给出你在问题中提到的确切行为,但我会说IPC方法是你处理创建服务/独立应用程序对的模式的最佳选择。 / p>