Если я запускаю эту команду в командном окне, она работает нормально, давая ожидаемые результаты. Я сначала захожу в Путь файла через 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);
Есть предложения, как исправить эту проблему или что я делаю неправильно?
введите полный путь к месту, где находится cmd.exe: FileName = @ "cmd",
Подсказка: чтобы упростить устранение неполадок, сначала попробуйте запустить / имитировать вызов cmd.exe с теми же аргументами, что и в строке Command вашего кода в консоли. (Например, введите в консоли: cmd /c ... с последующим содержанием командной строки)
Это наша внутренняя разработанная программа, недоступная снаружи. Я искал больше и нашел эту страницу. «community.spiceworks.com/topic/…». Это именно то, что мне нужно. Но когда я бегу таким образом, он говорит, что «C: \ Program» не является внутренней программой. Думаю, он не может разобрать полный путь. Я хочу перейти к: cd C: \ Program Files (x86) \ ProgramPath Затем запустите команду, чтобы получить результаты в C: \ Temp \ Test.txt: \ retrieve -f> C: \ Temp \ Test.txt
Вот код, который работает, но не выводится в файл ... ____________ ProcessStartInfo Process = new ProcessStartInfo {UseShellExecute = false, CreateNoWindow = false, FileName = @ "C: \ Program Files (x86) \ ProgramName \ Command.exe",} ; строка RunCommand = @ "/ c C: \ Program Files (x86) \ ProgramName \ Command.exe -f> C: \ Temp \ Test.txt"; Process.Arguments = RunCommand; Process.Start (Процесс); Console.WriteLine (RunCommand); Console.ReadLine ();
Я вижу вывод в консоли: / c C: \ Program Files (x86) \ ProgramName \ Command.exe -f> C: \ Temp \ Test.txt Результаты: Строка 1 Строка 2 Строка 3 Строка 4
Привет! Я отредактировал ваш вопрос, чтобы, надеюсь, сделать его более читабельным и дать вам лучший ответ. Удачи!





Итак, в конечном итоге я считаю, что ваша проблема заключается в попытке запустить командную строку и заставить ее выполнить перенаправление вывода. Честно говоря, я не уверен, что это поддерживается, и это не вопрос C#. Если вы действительно действительно хотите сделать это таким образом, я рекомендую написать небольшой командный файл (или, возможно, сценарий PowerShell), который делает то, что вы хотите, и принимает нужные вам параметры ... возможно, только имя выходного файла, а затем запускать его напрямую.
Тем не менее, позвольте мне порекомендовать вам вместо этого использовать перенаправление вывода, встроенное в класс процесса:
Затем вы можете прочитать результат прямо в своей программе и делать с ним все, что захотите ... например, просто записать его в файл ... но я сильно подозреваю, что вы действительно хотите что-то сделать с ним внутри, и что в любом случае его никогда не нужно записывать в файл (поскольку вы записываете его во временную папку).
и все. Спасибо за вклад. Я понял с помощью приведенного ниже процесса, и он работает так, как мне нужно. Единственная проблема в том, что, хотя я описал это как «CreateNoWindows = True», окно консоли все еще мигает.
общедоступная константная строка output = "C: \ Temp \ Test.txt"; Процесс p = новый процесс (); p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; p = Process.Start (процесс); p.StandardInput.WriteLine (@ "cd" + FilePath); p.StandardInput.WriteLine (@ "Retrieve -f>" + output); p.StandardInput.WriteLine (@ "ВЫХОД"); строка output = p.StandardOutput.ReadToEnd (); строка error = p.StandardError.ReadToEnd ();
Есть ли какое-то решение с указанным выше фиксированным кодом, чтобы не перепрошивать консоль? Если я устанавливаю «UseShellExecute = True», это дает ошибку, поскольку «RedirectStandardOutput» требует UseShellExecute как False. Я как бы застрял в этой части здесь без решений.
Ваши пути могут содержать пробелы (в приведенном выше примере кода FilePath уже содержит). Таким образом, убедитесь, что пути в командной строке заключены в кавычки, иначе аргументы командной строки, которые вы передаете в cmd.exe, развалятся (из-за того, что аргумент пути не заключен в кавычки, содержащий пробелы). (Примечание: почему вы избегаете обратной косой черты, когда используете дословные строковые литералы
@"....."?)