繁体   English   中英

将参数传递给另一个WPF应用程序不起作用

[英]Passing Arguments to another WPF Application doesn't work

从一个WPF应用程序向另一个WPF应用程序传递两个参数时出现问题。 我将第二个WPF应用程序发布到我的桌面上,我想用我的第一个WPF应用程序启动它。

第一程序:

public MainWindow()
{
    InitializeComponent();
    ProcessStartInfo startInfo = new ProcessStartInfo();
    startInfo.FileName = @"C:\Users\User\Desktop\Work.application";
    startInfo.Arguments = "test 1234";
    Process.Start(startInfo);
}

为了在第二个程序中获取参数,我尝试了以下代码

1,使用Environment在Mainwindow中获取参数.GetCommandLineArgs()=>不起作用

public MainWindowSecondProgram()
{
    InitializeComponent();
    string[] args = Environment.GetCommandLineArgs();
    foreach (String element in args)
    {
        MessageBox.Show(element);
    }
}

2.使用启动功能在App中获取参数=>不起作用

public partial class App : Application
{
    protected override void OnStartup(StartupEventArgs e)
    {
        foreach (string element in e.Args)
        {
            MessageBox.Show(element);
        }
    }
}

现在,如果我将Visual Studio Project文件夹中的Work.exe(不是Work.application)复制到我的桌面,并从

@"C:\Users\User\Desktop\Work.application" to
@"C:\Users\User\Desktop\Work.exe"

然后再次运行我的第一个程序,它可以与第一个功能和第二个功能完美配合。

那么,为什么它可以与EXE一起使用,但不能与已发布的应用程序一起使用呢?

编辑:我通过传递两个参数引发调试器来测试这两个函数,并且它可以工作,但是没有通过将其传递给已发布的应用程序,只有EXE可以工作。

对于Windows Store应用程序,您需要使用Application.OnLaunched 试试这个代码:

public partial class App : Application
{
    protected override void OnLaunched(LaunchActivatedEventArgs args)
    {

            MessageBox.Show(args.Arguments);
    }
}

请注意,您必须自己将该字符串转换为数组。

要在ClickOnce应用程序中读取参数,请使用:

AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData

您可以在这里阅读更多内容

另外,不确定,但是您可能需要通过.appref-ms快捷方式(而不是.application文件本身)运行ClickOnce应用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM