【问题标题】:Passing data to .NET C# WPF applications/DLLs将数据传递给 .NET C# WPF 应用程序/DLL
【发布时间】:2008-11-21 07:08:16
【问题描述】:

我有一个 .NET C# WPF 应用程序,我正在尝试使用 Mutex 将其制成单实例应用程序。

此 .NET 应用程序由基于 C++ 的 DLL 使用 CreateProcessAsUser() 调用,并通过环境变量获得参数。

后续实例也将由 C++ DLL 以相同方式创建。

随后的实例需要在退出之前将其参数传递给应用程序的第一个实例。

问题是 .NET 应用程序中可以使用哪些方法,以便后续实例能够将其数据传递给 .NET 应用程序的第一个实例?越简单越好。

我研究了一些,但我希望有更简单的方法。

我研究过的东西:

  • 命名管道
  • .NET 远程处理
  • Windows 消息(将 WM_COPYDATA 发送到第一个实例窗口)

由于我只是试图将 4 个字符串传递给第一个实例,因此我试图避免使用上述方法,因为它们对我的问题来说有点矫枉过正。

我能想到的最简单的方法是从 .NET 应用程序中导出一个函数,这样 .NET 应用程序的后续实例就可以在 .NET 应用程序的第一个实例上调用此函数并将数据作为参数传递的功能。但是,这在 .NET 中可行吗?我读过 .NET EXE 或 DLL 无法导出函数。

谢谢!

【问题讨论】:

    标签: c# wpf singleton ipc single-instance


    【解决方案1】:

    我能想到的最简单的方法是从 .NET 应用程序中导出一个函数,然后后续实例只需调用该函数并将参数传递给它。

    这不是它的工作方式。您将在调用进程中加载​​ .NET 程序集,而不是神奇地跨越进程边界并与子进程对话。

    只需让父级使用 Process 类通过重定向管道打开子级,并让子级使用 Console.Read* 从标准输入读取数据

    【讨论】:

      【解决方案2】:

      谢谢你的回复,保罗!

      不过,我在上面的问题中添加了更多细节,因为我不确定我的场景是否被正确理解。

      但是关于您的回答,.NET 应用程序的父级将是一个基于 C++ 的 DLL,它所要做的就是调用 .NET 应用程序并为其提供参数。基于 C++ 的 DLL 也会在此之后退出,所以我不想再向它添加任何行为。

      因此,数据的传递将仅在 .NET 应用程序的实例之间完成。

      【讨论】:

        【解决方案3】:

        由于您要从 .NET 转到 .NET,我建议您只进行 WCF 调用。您可以在两个 .NET 实例之间使用命名管道传输来公开“服务”(这是您的第一个实例将公开的内容)。

        后续实例将执行单实例检查,如果它们检测到已运行的实例,则可以对第一个实例中运行的服务进行 WCF 调用并以这种方式传递数据。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-10-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-09-02
          • 2013-02-26
          相关资源
          最近更新 更多