Запустите команду DOS с параметрами в C#
Если я запускаю эту команду в командном окне, она работает нормально, давая ожидаемые результаты. Я сначала иду в FilePath через CD FilePath
, Затем запустите команду с флагом и отправьте вывод в DestPath.
C:\Program Files (x86)\ProgramName\FileName.exe -f > C:\Temp\Test.txt
Но это не работает через процесс ниже. Я прошел много форумов и пробовал решения, но ни один не работал.
public const string FilePath = @"C:\\Program Files (x86)\\ProgramName\\FileName.exe";
public const string DestPath = @"C:\\Temp\\Test.txt";
public static void GetResults()
{
ProcessStartInfo process = new ProcessStartInfo
{
UseShellExecute = true,
CreateNoWindow = false,
FileName = @"cmd",
};
string Command = @"/c " + FilePath + " -f > " + DestPath;
process.Arguments = Command;
process.WindowStyle = ProcessWindowStyle.Hidden;
Process.Start(process);
Thread.Sleep(2000);
Любые предложения о том, как исправить эту проблему или что я могу делать неправильно?
1 ответ
Итак, в конечном счете, я считаю, что ваша проблема заключается в попытке запустить командную строку и заставить ее выполнить перенаправление вывода. Я, честно говоря, не уверен, что это поддерживается, и это не вопрос C#. Если вы действительно хотите сделать это таким образом, я рекомендую написать небольшой пакетный файл (или, возможно, скрипт powershell), который делает то, что вы хотите, и принимает параметры, которые вам нужны... возможно, только выходное имя файла, а затем запустите его напрямую.
Тем не менее, позвольте мне рекомендовать, пожалуйста, вместо этого использовать перенаправление вывода, встроенное в класс процесса:
Затем вы можете прочитать вывод непосредственно в вашу программу и сделать с ней все, что захотите... что может быть просто записать его в файл... но я сильно подозреваю, что вы действительно хотите что-то сделать для него внутренне, и это на самом деле его никогда не нужно записывать в файл (так как вы записываете его во временную папку).