在WPF应用程序中使用Process.Start调用另一个WPF应用程序

9
我正在尝试从一个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;


        }
    }
    }
    }

然而,这也没有起作用!!!请帮忙!!

1
你确定 temp 的值和你预期的一样吗?此外,我在使用 Powershell 时曾经遇到过从启动信息中检索参数时出现问题的情况,忘记了问题是什么,但我认为应用程序仍然会使用正确的参数运行,只是在启动信息中可能没有保留下来。 - H.B.
我确信temp保存了所需的值。但我认为它没有被传递到调用的WPF应用程序中。 - Sana
1
@Sana,你能展示一下temp的声明吗? - Jodrell
变量 temp = string.Empty; temp = Convert.ToString(values[0], CultureInfo.InvariantCulture); 我非常确定 temp 包含所需的值,因为我已经添加了监视并监测了更改。 - Sana
2个回答

3

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

string[] args = Environment.GetCommandLineArgs

或者使用传递给你的WPF应用程序主方法(App.xaml.cs)的string[]。

public partial class App : Application {

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

注意: 下面的调用

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

如果您没有使用Start方法启动进程,则StartInfo属性不会反映用于启动进程的参数。例如,如果您使用GetProcesses获取计算机上正在运行的进程数组,则每个Process的StartInfo属性不包含用于启动进程的原始文件名或参数。有关详细信息,请参阅此MSDN条目。


但我确实在调用应用程序中使用了start方法来启动该进程。 - Sana
我使用了你之前建议的类似方法(见编辑)...但那也没有起作用。 - Sana
@Sana 但不是从已启动的应用程序内部。 - Jodrell
但不是从已启动的应用程序内部...抱歉,我不明白...什么?我在被调用的应用程序中添加了这个。 - Sana
1
@Sana,这正是问题所在。您有两个进程,显然不共享变量;每个进程都有自己的 Process 对象实例。第一个进程(调用 Start 的进程)中的对象将具有 StartInfo。第二个进程中的对象将没有,因为它正在获取一个 已运行 进程的 Process 实例。GetCurrentProcess 在这方面等同于 GetProcesses:您不是启动一个 进程,而是获取一个 现有 进程,因此没有 StartInfo(根据本答案末尾引用的 MSDN 文档)。 - Joe White
显示剩余3条评论

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

这篇文章介绍了如何在WPF应用程序中使用Process.Start()方法来启动另一个应用程序。同时,它还提供了一些代码示例和注意事项,以帮助您更好地理解和使用这个方法。请注意保留HTML标签。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接