Использование процесса.запуск в приложении wpf для вызова другого приложения wpf
Я пытаюсь вызвать одно приложение 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 ответов
попробуйте использовать окружающая среда класс для получения аргументов командной строки.
string[] args = Environment.GetCommandLineArgs
или используйте строку [], которая передается вашему основному методу вашего приложения WPF (App.код XAML.цезий.)
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 каждого процесса не содержит исходного имени файла или аргументов, используемых для запуска процесса.
Ну, я, наконец, нашел решение моего вопроса, если кто-то заинтересован. В то время как в вызывающем приложении я поддерживал тот же код, который я ранее использовал:
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