在wpf应用程序中使用process.start来调用另一个wpf应用程序

时间:2012-05-11 07:25:09

标签: c# wpf process argument-passing calling-convention

我试图从另一个wpf应用程序调用一个wpf应用程序。 调用wpf应用程序进行调用

ProcessStartInfo BOM = new ProcessStartInfo();

BOM.FileName = @"D:\WPFAPPLICATION.exe";

BOM.Arguments = temp;

Process.Start(BOM);

现在在调用的应用程序中,我尝试检索使用

传递的参数
  string arguments =Process.GetCurrentProcess().StartInfo.Arguments;

然而,这些论点没有通过。这是为什么?

我还尝试了另一种方法:

    public partial class App : Application
    {
    public static String[] mArgs;

    private void Application_Startup(object sender, StartupEventArgs e)
    {

        if (e.Args.Length > 0)
        {
            mArgs = e.Args;


        }
    }
    }
    }

然而这也不起作用!!! 请帮助!!

2 个答案:

答案 0 :(得分:3)

尝试使用Environment类来获取命令行参数。

string[] args = Environment.GetCommandLineArgs

或使用传递给WPF应用程序的主方法(App.xaml.cs)的字符串[]。

public partial class App : Application {

    protected override void OnStartup(StartupEventArgs e) {
        string[] args = e.Args;
    }
}

注意: 电话

string arguments =Process.GetCurrentProcess().StartInfo.Arguments;

不会返回任何值。请参阅此MSDN条目

  

如果未使用Start方法启动进程,则StartInfo属性不会反映用于启动进程的参数。例如,如果使用GetProcesses获取计算机上运行的进程数组,则每个进程的StartInfo属性不包含用于启动进程的原始文件名或参数。

答案 1 :(得分:2)

如果有兴趣的话,我终于找到了我的问题的解决方案。 在调用应用程序中,我保留了我之前使用的相同代码:

ProcessStartInfo BOM = new ProcessStartInfo();
BOM.FileName = @"D:\WPFAPPLICATION.exe";
BOM.Arguments = temp;
Process.Start(BOM);

在被调用的应用程序中,为了成功接收参数,我只需要:

    System.Text.StringBuilder strbuilder= new System.Text.StringBuilder();


    foreach (String arg in Environment.GetCommandLineArgs())
    {
        strbuilder.AppendLine(arg);
        barcode = arg;
    }
    psnfo = strbuilder.ToString();

我没有以正确的方式处理传递给流程的参数

所以显示psnfo

代码返回:

 D:\WPFAPPLICATION.exe temp

来源:http://www.codeproject.com/Questions/386260/Using-process-start-in-a-wpf-application-to-invoke