Некорректно запускаются исполняемые файлы с помощью класса Process. В чём проблема?
Возникает проблема при запуске некоторых .exe файлов, которые подгружают внешние данные (например картинки). В таких .exe файлах для картинок прописаны ссылки и лежат они в папке с .exe файлом. Но при запуске из под программы на С#, при помощи класса Process, такие .exe файлы выдают ошибку о том, что пути к файлам не найдены , или не подгружает эти файлы вообще.
Поиск в интернете, к сожалению, ничего не дал.
Заранее благодарю за ответы.
Благодарю за ответ.
Все значения используются по умолчанию. Сам вызов функции выглядит так:
Process.Start(t.Rows[e.RowIndex].Cells[st].Value.ToString());
t.Rows[e.RowIndex].Cells[st].Value.ToString()-путь к файлу, который я беру из таблицы. Сам путь задаётся корректно.
Если прописывать запуск программы полностью т.е.
Process compiler = new Process();
compiler.StartInfo.FileName = "";
compiler.StartInfo.Arguments = t.Rows[e.RowIndex].Cells[st].Value.ToString();
compiler.StartInfo.UseShellExecute = false;
compiler.StartInfo.RedirectStandardOutput = true;
compiler.Start();
то возникает вопрос что прописывать в compiler.StartInfo.FileName. По умолчанию стоит пустая строка, но так он конечно же ничего не запустит. WorkingDirectory в случае если StartInfo.FileName = "" так же равна "" - пустой строке.
Программа работает корректно с файлами Microsoft Office, музыкой, видео интернет ссылками о и большинством .exe файлов.
Насколько я понял проблема в том, что ссылки на картинки он ищет в том каталоге куда установлена моя программа, а не там где лежит запускаемы .exe.
А вот как указать ему нужный путь я не знаю.
Александр Волков: в compiler.StartInfo.Arguments пишутся параметры командной строки, имя запускаемого файла однозначно должно быть в compiler.StartInfo.FileName;
Я предлагаю вам в WorkingDirectory передать путь до нужного .exe
У меня ниже есть пример, который запускает nodeJS программу с параметром "tester.js" и еще строкой аргументов
_process = new Process();
//директория, в которой находится запускаемый файл
_process.StartInfo.WorkingDirectory = NodePath;
//имя программы
_process.StartInfo.FileName = "node";
//формируем строку с аргументами
_process.StartInfo.Arguments = "tester.js " + mode;
_process.StartInfo.UseShellExecute = false;
_process.StartInfo.RedirectStandardOutput = true;
_process.StartInfo.RedirectStandardError = true;
_process.OutputDataReceived += new DataReceivedEventHandler(NetOutputDataHandler);
_process.ErrorDataReceived += new DataReceivedEventHandler(_process_ErrorDataReceived);
_process.Start();
_process.BeginOutputReadLine();
_process.BeginErrorReadLine();
_process.WaitForExit();
int code = _process.ExitCode;
P.S.: я правильно понимаю, что возможности внести изменения в вызываемую программу нет?
Я думаю, указание WorkingDirectory должно решить проблему: запускаемый процесс будет запущен из указанной директории и, если пути заданы относительно (.\file.jpg), то все должно быть ок
Если нет, то, думаю, стоит поискать способ указания путей до файлов динамически