我发现有很多帖子显示如何检测应用程序实例是否已经运行。但我找不到任何一个显示如何访问或使用相同的运行应用程序。
我创建了shell菜单项并将它们链接到一个应用程序。对于前者如果右键单击任何文件夹,则显示“OS Monitor”。如果我点击该应用程序已启动。如果我再次右键单击该文件夹并选择“OS Monitor”,则启动另一个相同应用程序的实例。我必须阻止这一点。当用户关闭“OS Monitor”表单时,我将其隐藏起来。因此,如果用户再次选择相同的菜单选项,则需要显示相同的运行表单。
我使用C#2005创建了应用程序。有没有人知道如何访问应用程序的相同运行实例。
提前致谢。
答案 0 :(得分:0)
由于应用程序的地址空间是分开的,您必须使用一些全局机制/对象。一个示例是名为互斥锁:您创建一个已命名的互斥锁,如果它已经存在,则该应用程序已在运行。 Using Mutexes for ensuring that only one instance is running is presented on this blog
第二步是与正在运行的实例进行通信。因此,您必须使用一些IPC机制。如果您正在运行Windows,则最简单的方法是使用Windows消息(如博客中的示例)。请注意,这不能移植到MONO,因为您必须进行本机调用。如果重要,您可以在其他可能性之间使用网络连接。请参阅此问题的答案:IPC Mechanisms in C# - Usage and Best Practices。
将参数传输到正在运行的实例后,当然必须退出,否则最终会运行两个应用程序。在很短的时间内(参数传输的时间)你确实有两个实例在运行,但只有一个有效地正在运行。
此回复是在您可以/希望修改“OS Monitor”的情况下做出的。