2014-01-13 6 views
12

У меня есть проект, запущенный c: \ work \ SomeVariantFolder \ MySolution \ MyProject \ Bin \ Debug, и мне нужно выполнить командную строку из этого проекта из одной из подпапок: c : \ работа \ SomeVariantDev. Проблема, с которой я столкнулся, - это получить из папки, в которой работает мой проект, в папку, откуда я могу запустить эту командную строку.Выполнять командную строку из определенной папки

Обратите внимание: я не могу использовать командный файл для этого решения.

Что я пытался сделать - объявить частный метод, который выполняет три команды из того же процесса, переходя четыре папки вверх и затем выполнять мою команду, но это, похоже, не работает. Я чувствую, что я делаю что-то не так, потому что, если я запустил эту команду из c: \ work \ SomeVariantFolder \, она будет хорошо работать.

var process = new System.Diagnostics.Process(); 
var startInfo = new System.Diagnostics.ProcessStartInfo 
       { 
         WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal, 
         FileName = "cmd.exe", 
         RedirectStandardInput = true, 
         UseShellExecute = false 
       }; 

process.StartInfo = startInfo; 
process.Start(); 



process.StandardInput.WriteLine("cd.."); 
process.StandardInput.WriteLine("cd.."); 
process.StandardInput.WriteLine("cd.."); 
process.StandardInput.WriteLine("cd.."); 

process.StandardInput.WriteLine("my command"); 

Пожалуйста, обратите внимание, что из-за характер моего решения я не могу использовать командные файлы и не могу использовать C: \ работы \ SomeVariantFolder как жестко закодированной папка, так как название «SomeVariantFolder» может изменяться при некоторых обстоятельствах.

Любая помощь будет appriciated

+0

, чтобы убедиться, что вы, где вы хотите быть, вы могли бы сначала выбрать диск 'C:' затем перейти в корень этого диска '' кд \\ затем введите каталог, в котором вы, наконец, хотите 'cd path \ to \ subfolder'; имейте в виду, что вам нужно либо вывести «\» в C# -строках, либо предшествовать строке с помощью '@', чтобы игнорировать escape-последовательности. – DrCopyPaste

+2

Вместо 'CD'-из одного каталога в другой, почему бы не установить' WorkingDirectory' 'ProcessStartInfo' напрямую? – IronGeek

+0

@NahumLitvin, я попытался использовать этот пример, но это не соответствовало моим потребностям. Thomas W, Это хороший ответ, который я не натолкнулся. IronGeek, я считаю, что это правильный ответ. Если бы вы могли ответить на мой вопрос, я бы отметил вас. – user3150947

ответ

16

Попробуйте установить WorkingDirectory свойство ProcessStartInfo наборам начальный каталог для процесса, который будет запущен.

var startInfo = new System.Diagnostics.ProcessStartInfo 
{ 
    WorkingDirectory = @"The\Process\Working\Directory", 
    WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal, 
    FileName = "cmd.exe", 
    RedirectStandardInput = true, 
    UseShellExecute = false 
}; 

Ссылки: ProcessStartInfo.WorkingDirectory Property

1
System.Environment.CurrentDirectory = @"..\..\.."; 
System.Diagnostics.Process.Start("MyCommand", "arg1, arg2, arg3"); 
+5

* Никогда * установите глобальную настройку, если локальная работа будет работать нормально. 'System.Environment.CurrentDirectory' изменяет рабочий каталог для всего процесса, который обычно не совсем то, что вы хотите. Вместо этого вы должны использовать свойство 'ProcessStartInfo.WorkingDirectory' (с помощью' UseShellExecute', если необходимо). – Luaan

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