Задача: из программы на 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#? Например, запускаем exe на С#, в нем стартует прописанный exe на Си - результат сохранить в .тхт, и прочитать этот .тхт из exe C#. Си(кансоль)\\C#(окна)
Все исполняемые файлы двоичные, на каком бы языке они ни были написаны. Так что разницы не должно быть. По идее попробовать экспериментально выйдет быстрее чем писать вопрос. ))
А как при таком запуске отследить, работает ли запущенное приложение или закончило работу?
Куда писать приложение которое я хочу запустить?
ProcessStartInfo infoStartProcess = new ProcessStartInfo();
infoStartProcess.WorkingDirectory = @"C:\Program Files\OpenHPSDR\PowerSDR mRX PS\";
infoStartProcess.FileName = "PowerSDR.exe";
Process.Start(infoStartProcess);
Свою проблему решил. Спасибо!