Каков путь к моему внешнему исполняемому файлу, который я включил? - PullRequest
3 голосов
/ 14 января 2012

Итак, я успешно смог запустить приложение командной строки с различными аргументами из моего проекта, используя следующий код:

String f = fileName;
Process process = new System.Diagnostics.Process();
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.FileName = "C:\\projects\\something\\MediaInfo.exe";
process.StartInfo.Arguments = " \"--Inform=Video;%Duration%|%Width%|%Height%;\" \"" + f + "\"";
process.Start();
StreamReader output = process.StandardOutput;
process.WaitForExit();
MessageBox.Show(output.ReadToEnd());

Теперь вместо абсолютного пути, который я указал для MediaInfo.exe, я бы хотел указать относительный путь, чтобы при отправке моего приложения кому-то не приходилось разбираться с размещением его в правильном место.

В Visual Studio я выбираю свой проект и нажимаю добавить существующий. Я добавил свои файлы. Затем выбрал «Всегда копировать». Я пробовал разные предметы для "Build Action". У меня ощущение, что «Нет» - это правильный вариант.

В любом случае, моя цель - иметь process.StartInfo.FileName относительный путь. Я не знаю, как сделать это правильно. Есть идеи?

Ответы [ 2 ]

3 голосов
/ 14 января 2012

Корневой каталог вашего приложения можно получить с помощью ...

string appRoot = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);

Для этого оператора требуются System.IO и System.Diagnostics для компиляции.

Вы можете добавить кэто значение для доступа к подкаталогу, например «data», в корне приложения с помощью ...

string dataPath = Path.Combine(appRoot, "data");

Приложение должно работать с полным доверием, чтобы они работали ...

0 голосов
/ 14 января 2012

Измените «C: \ projects \ something \ MediaInfo.exe» на «MediaInfo.exe», чтобы ваше приложение попыталось найти его в том же каталоге.Убедитесь, что ваше приложение выпущено с помощью «MediaInfo.exe», вот и все.

Материал «Всегда копировать» копирует только «MediaInfo.exe» в выходной каталог, это не поможет, если вы жестко закодируете путь к файлу.

...