Запустите команду 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), который делает то, что вы хотите, и принимает параметры, которые вам нужны... возможно, только выходное имя файла, а затем запустите его напрямую.

Тем не менее, позвольте мне рекомендовать, пожалуйста, вместо этого использовать перенаправление вывода, встроенное в класс процесса:

https://docs.microsoft.com/en-us/dotnet/api/system.diagnostics.processstartinfo.redirectstandardoutput?view=netframework-4.7.2

Затем вы можете прочитать вывод непосредственно в вашу программу и сделать с ней все, что захотите... что может быть просто записать его в файл... но я сильно подозреваю, что вы действительно хотите что-то сделать для него внутренне, и это на самом деле его никогда не нужно записывать в файл (так как вы записываете его во временную папку).

Другие вопросы по тегам