1

我发现有很多帖子展示了如何检测应用程序实例是否已经运行。但我找不到任何显示如何访问或使用相同正在运行的应用程序的人。

我已经创建了 shell 菜单项并将它们链接到一个应用程序。例如。如果您右键单击任何文件夹,它会显示“OS Monitor”。如果我单击该应用程序已启动。如果我再次右键单击该文件夹并选择“OS Monitor”,则会启动同一应用程序的另一个实例。我必须防止这种情况。此外,当用户关闭“操作系统监视器”表单时,我只是将其隐藏。因此,如果用户再次选择相同的菜单选项,则需要显示相同的运行表单。

我已经使用 C#2005 创建了应用程序。有谁知道我如何访问应用程序的相同运行实例。

提前致谢。

4

1 回答 1

0

由于应用程序的地址空间是分开的,因此您必须使用一些全局机制/对象。一个例子是命名互斥体:你创建一个命名互斥体,如果它已经存在,那么应用程序已经在运行。此博客上介绍了使用互斥锁确保只有一个实例正在运行

第二步是与正在运行的实例进行通信。因此,您必须使用一些 IPC 机制。如果您正在运行 Windows,最简单的方法是使用 Windows 消息(如博客中的示例)。请注意,这不能移植到 MONO,因为您必须进行本地调用。如果这很重要,您可以在其他可能性中使用网络连接。请参阅此问题的答案:C# 中的 IPC 机制 - 用法和最佳实践

将参数传输到运行实例后,当然必须退出,否则最终会运行两个应用程序。在很短的时间内(参数传输时间),您确实有两个实例在运行,但只有一个有效地完成了这项工作。

此响应是在您可以/希望对“OS Monitor”进行修改的假设下做出的。

于 2009-10-05T15:51:07.370 回答