【问题标题】:Access Running Instance Of Application访问应用程序的运行实例
【发布时间】:2009-10-05 14:08:35
【问题描述】:

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

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

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

提前致谢。

【问题讨论】:

    标签: c# instance windows-shell


    【解决方案1】:

    由于应用程序的地址空间是分开的,因此您必须使用一些全局机制/对象。一个例子是命名互斥体:你创建一个命名互斥体,如果它已经存在,那么应用程序已经在运行。 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”进行修改的假设下做出的。

    【讨论】:

    • 谢谢jdehaan!!!您提供了有价值的信息。我会尝试实现这一点。
    猜你喜欢
    • 1970-01-01
    • 2020-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多