2014-12-02 41 views
0

此问题的简短版本是,如何从Java应用程序(NetBeans插件,特定)发送消息(例如文件路径)运行C#WinForms可执行应用程序?将消息从NetBeans插件传递到C#WinForms应用程序

一些细节。

我目前有一个Windows应用程序,我建立了它(它就像脚本文件的解析器/编辑器,帮助我们的测试团队使用简单的GUI工具自动化脚本构建过程)。在应用程序中,您可以使用应用程序的“加载”按钮,热键,拖放等来加载文件。您还可以通过命令行打开一个或多个文件路径作为参数的应用程序,该应用程序将随给定的文件已经加载。

根据要求,我拼凑了一个NetBeans插件(Java),它抓取当前NetBeans中焦点的文件的文件路径,然后以聚焦文件的路径作为参数执行我的应用程序。这使我可以直接从NetBeans启动我的应用程序,并在我的应用程序中打开NetBeans中正在编辑的文件。

那么我的应用程序可以这样做: 启动与从内部负载命令CLI参数 加载文件加载文件上即时

它不能做什么(我想添加什么): 在运行实例中从外部消息参数即时加载文件 从CLI消息参数快速加载运行实例中的文件

MSMQ是我不能使用的解决方案。看到它在很多其他线程中建议。需要注意的是,NetBeans插件和我的应用程序将始终在同一个系统上,但我无法在所有目标机器上获得MSMQ。

+1

这种事情的通常解决方案是实现一个“单实例”应用程序,并且包含辅助实例的功能(通常只需通过命名互斥体检查是否已经有实例在运行,如果有,设置该实例作为活动窗口并退出)传递给正在运行的实例的信息以打开该文件。这可以通过正常的Windows机制(例如MSMQ,DDE,共享内存,命名管道等)完成;由于您正在实施主程序中的实际工作,因此您不仅限于Java支持的内容。 – 2014-12-02 21:37:00

+0

谢谢,彼得。我的应用程序已经使用互斥体来确保一次只能运行一个实例,并且该部分运行正常。我一直在想办法让MemoryMappedFile做我想做的事情,但目前这种做法并不顺利。接下来我会研究你的其他建议。部分问题是这个功能在项目交付后几个月就被要求了,我担心与感知收益相比,在一些信息传递策略中工作可能是一次重大的改变。 – Steverino 2014-12-02 21:40:37

+0

彼得,我结束了使用你的解决方案,并实施你的建议之一,命名管道。在我的经验层面上,这对我来说只是少数,但我花费了我的时间,并使一切顺利进行。非常感谢您的评论! – Steverino 2014-12-06 06:08:32

回答

0

两个建议:

(1)如果您能想出一个办法来发布从一个Java程序到Windows事件日志中的事件,你绝对可以设置您的.NET应用程序才能观看特定的事件类型(2)如果您可以安排.net应用程序使用FileSystemWatcher(可能位于%TEMP%)中监视在特定目录中创建的文件,则可以让Java进程编写一个文件,其中包含任何信息希望通过。

相关问题