2013-08-20 1 views
0

У меня есть приложение WPF, и мне нужно развернуть отдельное приложение MFC, а затем связаться с ним. Я собирался использовать Process.Start, но мне интересно, есть ли лучший способ сделать это в эти дни. Я сам могу научиться, но мне нужно знать, с чего начать. Благодарю.Запуск и управление внешним процессом из приложения WPF

редактирует:

Я нашел, что это свидетельствует не существует. Это правда?

Alternatives to System.Diagnostics.Process.Start()

Спасибо.

+0

Вы используете статический метод или тот, который берет начальную информацию? –

+0

Пожалуйста, ясно объясните, что вы подразумеваете под «общением с ним». Какую коммуникацию вы ожидаете выполнить? – Sheridan

+0

@GarryVass, либо, я не уверен, как они отличаются, за исключением того, что информация о запуске позволяет более подробно рассказать. – Jordan

ответ

0

Для вашего немедленного вопроса в последних версиях .NET нет ничего нового, который дает лучший или более современный способ запуска локального исполняемого файла. Process.Start (и был) способ пойти.

Простейшим и наиболее удобным является выбор одного из пяти статических методов процесса. Передача строк или заполненный экземпляр StartInfo. Вы бы использовали последний, если вам нужно было больше контролировать, как процесс был поднят. Или интерес к вашему делу, если вы хотите передать stdio программы в виде потока в свое приложение. Вот образец заполнения экземпляра Start Информация от одного из моих утилит ...

 ProcessStartInfo start = new ProcessStartInfo(BaseIoConstantsProvider.CommandProcessor) 
      { 
       Arguments = BaseIoConstantsProvider.KeepAlive, 
       UseShellExecute = false, 
       CreateNoWindow = BaseIoConstantsProvider.NoDosWindow, 
       RedirectStandardOutput = true, 
       RedirectStandardInput = true, 
       RedirectStandardError = true, 
       WindowStyle = ProcessWindowStyle.Hidden, 
      }; 

Для второй части Вашего вопроса, то статический метод не будет делать, если вам нужно, чтобы взаимодействовать с процессом после запуска , Из той же утилиты ...

 Process p = new Process { StartInfo = start, EnableRaisingEvents = true }; 
     p.ErrorDataReceived += PErrorDataReceived; 
     p.Exited += PExited; 
     p.Start(); 
     p.StandardInput.AutoFlush = true; 
     p.StandardInput.WriteLine(cmdLine); 
     p.BeginOutputReadLine(); 

В этом примере показано, что два события подключаются вместе с чтением stdio из процесса. Это здорово для этой цели, но излишнее, если вы просто хотите запустить другой исполняемый файл.

Таким образом, основным детерминированным в выборе метода запуска является вопрос: нужно ли моему приложению взаимодействовать с процессом после его запуска?

И, наконец, иногда вы можете захотеть вызвать канонический глагол или даже создать собственный собственный глагол, чтобы начать заданный процесс. Они отображаются в контекстном меню при щелчке правой кнопкой мыши по элементу и дают вам дополнительную гибкость для запуска процесса. Здесь есть отличная статья http://msdn.microsoft.com/en-us/library/windows/desktop/cc144101(v=vs.85).aspx#canonical о том, как реализовать глагол.

+0

Я не использовал этот метод, потому что приложение, которое я размещаю, не поддерживает стандартный IO. Но это дало мне вдохновение для создания библиотеки объектов, которые сделали мою жизнь намного легче. Благодарю. – Jordan

+0

@ Джордан, когда ваша библиотека стабильная, вы можете положить ее на Codeplex и дать мне крик. Потому что я все время должен заниматься этим, и, следовательно, я смотрю. –

+0

Может быть. Я не тестирую его. Посмотрим. – Jordan