У меня работает.У меня есть глупое приложение командной строки, setcc.exe
, которое ничего не делает, но устанавливает код условия (код выхода) на указанное значение:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace setCC
{
class Program
{
static int Main( string[] args )
{
if ( args.Length == 0 ) throw new ArgumentException( "Required Argument is missing" ) ;
int cc ;
bool isValid = int.TryParse( args[0] , out cc ) ;
if ( !isValid ) throw new ArgumentException( "Required parameter is not a valid number") ;
return cc ;
}
}
}
Итак, запускаю команду:
`setcc 17`
установите код условия (код завершения, уровень ошибки) на 17 (как и следовало ожидать).
Используя это как мой дочерний процесс (и ваш пример кода), я написал этот тестовый комплект:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
namespace testHarness
{
class Program
{
static void Main( string[] args )
{
IEnumerable<bool> Redirections = new bool[]{ false , true } ;
foreach ( bool redirecting in Redirections )
{
int cc ;
using ( Process test = new Process() )
{
test.StartInfo.FileName = "cmd.exe" ;
test.StartInfo.Arguments = @"/c setcc 17 " ;
test.StartInfo.RedirectStandardError = redirecting ;
test.StartInfo.RedirectStandardOutput = redirecting ;
test.StartInfo.UseShellExecute = false ;
test.StartInfo.CreateNoWindow = true ;
test.Start() ;
test.WaitForExit() ;
cc = test.ExitCode ;
}
Console.WriteLine( "Redirecting:{0}, cc is {1}" , redirecting , cc ) ;
}
return ;
}
}
}
Это ничего, кроме выполнения setcc 17
дважды подряд, один с отключенным перенаправлением и один раз с включенным перенаправлением.
Я получаю вывод, который ожидаю увидеть:
Redirecting:False, cc is 17
Redirecting:True, cc is 17
Я бы посмотрел, какое значение fc
возвращает.Что вы получите, если вы выполните ту же команду fc
в окне командной оболочки, как показано ниже:
c:\> fc /b /a C:\temp\debug\1.txt C:\temp\debug\2.txt
c:\> echo %ERRORLEVEL%
Мне также интересно, почему вы запускаете fc
внутри командной оболочки (cmd.exe
)и порождение двух процессов вместо одного.fc.exe
- это просто автономное приложение командной строки в c:\windows\system32
: просто запустите его напрямую.