在单独的应用程序域中访问 WPF 应用程序的命令行参数

发布于 2024-12-25 02:19:46 字数 872 浏览 0 评论 0原文

是否有一种干净的方法来访问作为启动 WPF 应用程序的 AppDomain.ExecuteAssembly 调用的一部分传递的命令行参数?

我正在一个单独的应用程序域中启动一个 WPF 应用程序,并将参数传递给该应用程序,如下所示:

AppDomain moduleDomain = AppDomain.CreateDomain("Friendly Name");
moduleDomain.ExecuteAssembly(path, new[] { "arg1", "arg2" });

有一个 解决方法 来访问这些参数,因为 Environment.GetCommandLineArgs()StartupEventArgs 返回原始应用程序的命令行参数,不是用 ExecuteAssembly() 启动的。

我想访问传递给 WPF 应用程序的参数,而无需手动定义 Main 方法,最好使用 StartupEventArgs。有办法这样做吗?

在单独的进程中启动 WPF 应用程序是可行的,但会降低性能并使调试变得复杂。

Is there a clean way to access the commandline arguments passed as part of an AppDomain.ExecuteAssembly call that starts a WPF application?

I'm spinning up a WPF application in a separate app domain and passing arguments to the application like so:

AppDomain moduleDomain = AppDomain.CreateDomain("Friendly Name");
moduleDomain.ExecuteAssembly(path, new[] { "arg1", "arg2" });

There's a work-around to access these arguments, since both Environment.GetCommandLineArgs() and StartupEventArgs return the commandline arguments for the original application, not the one spun up with ExecuteAssembly().

I would like to access the arguments passed to the WPF application without having to manually define a Main method, preferably using StartupEventArgs. Is there a way to do so?

Starting the WPF application in a separate process works, but has performance penalties and complicates debugging.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

迷荒 2025-01-01 02:19:46

Tigran 的评论引导我找到了一个令我满意的解决方案,使用 AppDomain.SetData< /a> 而不是使用命令行参数。基本轮廓如下所示:

AppDomain moduleDomain = AppDomain.CreateDomain("Friendly Name");
moduleDomain.SetData("arg1", "arg1Value");
moduleDomain.SetData("arg2", "arg2Value");
moduleDomain.ExecuteAssembly(path);

然后,访问 WPF 应用程序中的“参数”:

string arg1Value = AppDomain.CurrentDomain.GetData("arg1");
string arg2Value = AppDomain.CurrentDomain.GetData("arg2");

这非常适合我的用例。

Tigran's comment lead me to a solution that I'm happy with, using AppDomain.SetData instead of using command line arguments. The basic outline looks like this:

AppDomain moduleDomain = AppDomain.CreateDomain("Friendly Name");
moduleDomain.SetData("arg1", "arg1Value");
moduleDomain.SetData("arg2", "arg2Value");
moduleDomain.ExecuteAssembly(path);

Then, to access the 'arguments' in the WPF app:

string arg1Value = AppDomain.CurrentDomain.GetData("arg1");
string arg2Value = AppDomain.CurrentDomain.GetData("arg2");

This works well for my use case.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文