2012-05-11 34 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