2012-05-11 12 views
8

Tôi đang cố gắng gọi một ứng dụng wpf từ một ứng dụng wpf khác. Các cách gọi WPF ứng dụng thực hiện cuộc gọiSử dụng process.start trong ứng dụng wpf để gọi một ứng dụng wpf khác

ProcessStartInfo BOM = new ProcessStartInfo(); 

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

BOM.Arguments = temp; 

Process.Start(BOM); 

Bây giờ trong ứng dụng gọi, tôi cố gắng để lấy đối số được truyền bằng

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

Tuy nhiên, lập luận không được thông qua. tại sao lại thế này ??

Tôi cũng đã cố gắng một phương pháp khác, nơi ở:

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; 


     } 
    } 
    } 
    } 

Tuy nhiên điều này không làm việc, hoặc !!! Xin hãy giúp đỡ !!

+1

Bạn có chắc chắn 'temp' thực sự đã giá trị mà bạn mong đợi? Ngoài ra tôi đã có vấn đề lấy các đối số từ các thông tin bắt đầu trước khi sử dụng Powershell, quên vấn đề là gì, nhưng tôi nghĩ rằng ứng dụng vẫn chạy với các đối số đúng, nó có thể chỉ không được bảo quản trong thông tin bắt đầu. –

+0

Im chắc chắn temp giữ giá trị mong muốn. Nhưng tôi không nghĩ rằng nó đang được chuyển đến ứng dụng wpf đang được gọi. – Sana

+1

@Sana, bạn có thể hiển thị tuyên bố 'temp' không? – Jodrell

Trả lời

2

Tôi cuối cùng đã tìm được giải pháp cho câu hỏi của mình nếu có ai quan tâm. Trong khi trong ứng dụng gọi điện thoại tôi duy trì cùng mã tôi đã sử dụng trước đó:

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

Trong ứng dụng được gọi để nhận lập luận thành công tôi chỉ đơn giản là phải:

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


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

Tôi đã không xử lý các đối số được chuyển đến quy trình theo cách chính xác

do đó khi hiển thị psnfo

Mã trả về:

D:\WPFAPPLICATION.exe temp 

Nguồn: http://www.codeproject.com/Questions/386260/Using-process-start-in-a-wpf-application-to-invoke

3

Hãy thử sử dụng lớp Environment để nhận các đối số dòng lệnh.

string[] args = Environment.GetCommandLineArgs 

hoặc sử dụng chuỗi [] được chuyển đến phương pháp chính của ứng dụng WPF của bạn (App.xaml.cs).

public partial class App : Application { 

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

Lưu ý: Cuộc gọi

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

sẽ không trả lại bất kỳ giá trị. Xem MSDN cụm từ này

Nếu bạn không sử dụng phương pháp Start để bắt đầu một quá trình, tài sản StartInfo không phản ánh các thông số sử dụng để bắt đầu quá trình. Ví dụ, nếu bạn sử dụng GetProcesses để có được một mảng các tiến trình đang chạy trên máy tính, thuộc tính StartInfo của mỗi Process không chứa tên file gốc hoặc các đối số được sử dụng để bắt đầu quá trình.

+0

nhưng tôi đã sử dụng phương pháp bắt đầu trong ứng dụng gọi điện để bắt đầu quá trình – Sana

+0

Tôi đã sử dụng một phương pháp tương tự như đề xuất của bạn trước đây (xem bản chỉnh sửa) ... Nhưng điều đó cũng không hoạt động. – Sana

+0

@Sana nhưng không phải từ bên trong ứng dụng bắt đầu – Jodrell