2012-05-11 36 views
8

我想从另一个wpf应用程序调用一个wpf应用程序。 WPF应用程序调用使调用在wpf应用程序中使用process.start来调用另一个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; 


     } 
    } 
    } 
    } 

然而,这并没有任何工作! 请帮助!

+1

确定'temp'实际上已经值,你期待什么呢?另外我有问题从使用Powershell之前的启动信息检索参数,忘记了问题是什么,但我认为应用程序仍然运行正确的参数,它可能不会保存在启动信息中。 –

+0

我确定温度保持所需的值。但我不认为它被传递给被调用的wpf应用程序。 – Sana

+1

@Sana,你可以显示'temp'的声明吗? – Jodrell

回答

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

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属性不包含用于启动该进程的原始文件名或参数。

+0

,但我确实在调用应用程序中使用启动方法来启动进程 – Sana

+0

我使用了与您以前建议的类似方法(请参阅编辑)......但是这也没有效果。 – Sana

+0

@Sana但不是从已启动的应用程序内部 – Jodrell