【问题标题】:c# pass cmd args to existing instance instead of new instancec# 将 cmd args 传递给现有实例而不是新实例
【发布时间】:2014-09-18 15:43:34
【问题描述】:

我有一个手动启动的 C# Windows 窗体应用程序,然后主要在后台运行。在我的注册表中,该程序设置为处理“dstel”url 协议。也就是说href="dstel:1234567890"会成功打开我的程序。

问题是我的程序需要在任何给定时间只运行一个实例。我的研究表明,为了确保多个实例不会同时运行,我应该使用互斥体(由 How to check if another instance of the application is running 提供)。

假设这可行,当有人点击网页中我的特殊 dstel 链接时,我现在不知道该怎么做。我需要的是如何将命令行输入重定向到我已经运行的应用程序的方法 xyz()?

为了清楚起见,我按顺序设想了以下事件:

  1. 我手动启动程序的实例 A
  2. 我点击 dstel 链接
  3. 我的程序实例 B 启动
  4. 多亏了互斥锁,我的程序的实例 B 意识到实例 A 已经在运行了
  5. 实例 B 将其命令行参数传递给实例 A 的方法 xyz()。
  6. 实例 B 退出

我想到了一些可行的方法,最值得注意的是使用帮助应用程序或通过 WCF 设置命名管道。我愿意接受您的任何建议。

谢谢!

【问题讨论】:

  • msdn.microsoft.com/en-us/library/…。特别是它的 IsSingleInstance 属性和 OnStartupNextInstance 方法
  • @jameshollowell 做到了,谢谢!如果您将其放在答案中,我会将其标记为正确。

标签: c# mutex multiple-instances


【解决方案1】:

http://msdn.microsoft.com/en-us/library/microsoft.visualbasic.applicationservices.windowsformsapplicationbase(v=vs.110).aspx

如果您为基础应用重写此类并将其受保护的IsSingleInstance 属性设置为 true,则可以重写方法 OnStartupNextInstance(),该方法会在您的程序的后续实例启动时调用。

这应该如你所愿!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-15
    • 1970-01-01
    • 2022-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    相关资源
    最近更新 更多