Как запустить другую программу/исполняемый .exe файл из кода C#

Задача: из программы на C# запустить другую программу (исполняемый файл). В теории все просто

 System.Diagnostics.Process.Start(pathToFileString); 

Но есть нюанс, если запускаемая программа находится в другом каталоге и использует для получения инофрмации о текущем каталоге функцию Directory.GetCurrentDirectory, то она получит вместо собственного каталога каталог исходной программы, из которой и запускается второй исполняемый файл.

Вылечить это можно двумя способами.

1) Использовать для получения каталога с исполняемым файлом функцию GetCurrentDirectory несколько неправильно, так как ее значение может расходится с каталогом программы, лучше использовать Application.StartupPath.

2) Если надо поддерживать совместимость со старым/чужим кодом или вообще запускать чужой исполняемый файл, мы можем вручную переопределить рабочий каталог запускаемой программы с использованием класса информации о процессе ProcessStartInfo

using System.Diagnostics;

//... какой-то код... 

ProcessStartInfo infoStartProcess = new ProcessStartInfo();

infoStartProcess.WorkingDirectory = pathToDirectory;
infoStartProcess.FileName = pathToFileString;

Process.Start(infoStartProcess);

Комментарии

Как запустить другую программу/исполняемый .exe файл из кода C# — Комментарии (7)

  1. А возможно запустить exe на Си из программы на C#? Например, запускаем exe на С#, в нем стартует прописанный exe на Си - результат сохранить в .тхт, и прочитать этот .тхт из exe C#. Си(кансоль)\\C#(окна)

    • Все исполняемые файлы двоичные, на каком бы языке они ни были написаны. Так что разницы не должно быть. По идее попробовать экспериментально выйдет быстрее чем писать вопрос. ))

  2. А как при таком запуске отследить, работает ли запущенное приложение или закончило работу?

    • ProcessStartInfo infoStartProcess = new ProcessStartInfo();
      infoStartProcess.WorkingDirectory = @"C:\Program Files\OpenHPSDR\PowerSDR mRX PS\";
      infoStartProcess.FileName = "PowerSDR.exe";
      Process.Start(infoStartProcess);

Добавить комментарий для Ведомир Отменить ответ

Ваш e-mail не будет опубликован. Обязательные поля помечены *


*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>