2012-01-14 3 views
3

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

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 относительный путь. Я не знаю, как это сделать правильно. Есть идеи?

ответ

3

корневой каталог вашего приложения может быть получен ...

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

Это утверждение требует System.IO и System.Diagnostics для того, чтобы скомпилировать.

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

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

приложение должно быть запущено в полном доверии к этим работать. ..

+0

Ahhh, это не правильный путь. Это дает мне некоторый путь к моему каталогу приложений. Я могу видеть файлы, скопированные в папку отладки или папку выпуска; поэтому я знаю, что они где-то копируются. Этот путь не тот, хотя. Закрыть! – Parris

+0

Ahh нашел его! Спасибо, что указали мне в правильном направлении: String appRoot = Path.GetDirectoryName (AppDomain.CurrentDomain.BaseDirectory); – Parris

0

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

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

Смежные вопросы