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

Cal*_*leb 2 c# wpf appdomain command-line-arguments

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

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

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

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

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

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

Cal*_*leb 5

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

AppDomain moduleDomain = AppDomain.CreateDomain("Friendly Name");
moduleDomain.SetData("arg1", "arg1Value");
moduleDomain.SetData("arg2", "arg2Value");
moduleDomain.ExecuteAssembly(path);
Run Code Online (Sandbox Code Playgroud)

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

string arg1Value = AppDomain.CurrentDomain.GetData("arg1");
string arg2Value = AppDomain.CurrentDomain.GetData("arg2");
Run Code Online (Sandbox Code Playgroud)

这非常适合我的用例。