簡體   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