【问题标题】:Passing arguments to application将参数传递给应用程序
【发布时间】:2012-12-24 20:08:08
【问题描述】:

这个问题可能看起来有点模糊,但我们开始吧。

我正在阻止我的 wpf 应用程序的多个实例,如下所示:

Process proc = Process.GetCurrentProcess();
if (Process.GetProcessesByName(proc.ProcessName).Length > 1)
{
    Application.Current.Shutdown();
    return;
}

if (e.Args != null && e.Args.Count() > 0)
{
    this.Properties["Magnet"] = e.Args;
}

是否可以将命令行参数传递给已经运行的应用程序?

【问题讨论】:

  • 也许this 会有所帮助。
  • 我们使用 WCF(在一些已经发布的链接中提到,所以我不会重新链接)。 WCF 起初使用起来很麻烦,但它是(恕我直言)进行这种进程间通信的最佳方式。
  • 感谢所有出色的 cmets 和答案,提供了出色的服务。非常感谢!

标签: c# wpf process command-line-arguments app-startup


【解决方案1】:

不,这是不可能的。您应该使用一些inter process communication 技术。

【讨论】:

  • 是的,这是可能的解决方案 - 命名管道、远程处理等
【解决方案2】:

对于任何感兴趣的人,我决定在我的 App.Xaml.cs 中使用此代码:

[STAThread]
public static void Main()
{
    if (SingleInstance<App>.InitializeAsFirstInstance(UNIQUE))
    {
        var application = new App();
        application.InitializeComponent();
        application.Run();
        SingleInstance<App>.Cleanup();
    }
}

public bool SignalExternalCommandLineArgs(IList<string> args)
{
    // Use arguments
    return true;
}

UNIQUE 是 20 个字符的常量字符串。

SingleInstance&lt;App&gt;.Cleanup() 派生自ISingleInstanceApp,它在SingleInstance.cs 中定义,我还在我的应用程序类中实现了ISingleInstanceApp

感谢大家的帮助!

【讨论】:

    猜你喜欢
    • 2021-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 2012-05-08
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多