C# Process.Start(processInfo)响应为空
我需要使用C# Process.Start(processInfo)响应为空,c#,.net,C#,.net,我需要使用System.Diagnostics.Process.Start(processInfo)调用exe,并希望返回一些值。根据返回值,我需要执行进一步的操作。Exe正在被调用并准确地执行任务,但我无法获取返回值。process.Start()之后,代码被卡住。没有异常或警告 string arguments = arg[0]+ " " + arg[1] + " " + arg[2] + " " + arg[3]; string consoleExePath = @"C:\Test\Con
System.Diagnostics.Process.Start(processInfo)
调用exe,并希望返回一些值。根据返回值,我需要执行进一步的操作。Exe正在被调用并准确地执行任务,但我无法获取返回值。process.Start()之后,代码被卡住。
没有异常或警告
string arguments = arg[0]+ " " + arg[1] + " " + arg[2] + " " + arg[3];
string consoleExePath = @"C:\Test\Console.exe";
ProcessStartInfo processInfo = new ProcessStartInfo();
processInfo.WindowStyle = ProcessWindowStyle.Hidden;
processInfo.FileName = "cmd.exe";
processInfo.RedirectStandardOutput = true;
processInfo.UseShellExecute = false;
processInfo.WorkingDirectory = Path.GetDirectoryName(consoleExePath);
processInfo.Arguments = string.Format("/c START {0} {1}", Path.GetFileName(consoleExePath), arguments);
System.Diagnostics.Process p = System.Diagnostics.Process.Start(processInfo);
var output = p.StandardOutput.ReadToEnd();
p.WaitForExit();
int result = p.ExitCode; // always 0
exe中的代码:
static int Main(string[] args)
{
var flag = 0;
flag= objTest.DoSomething(args[0],args[1], args[2], args[3]);
//Console.WriteLine("Process completed!");
//Console.Read();
//return flag;
return 44; // a non zero value.
}
编辑:由于
Console.Read()代码>,代码执行受阻。感谢施纳德抓住了这个愚蠢的错误。但是var output=p.StandardOutput.ReadToEnd()代码>仍然为空。尝试int结果=p.ExitCode代码>和结果总是0
您的代码对我有效。请注意,在.exe代码中,有一行:
Console.Read();
因此,程序将等待用户输入一行,然后才退出。如果不这样做,其他代码将按照您所描述的那样等待应用程序终止
因此,您应该删除该行并重试
Christian.K在评论中指出的另一种可能性是使用processInfo.RedirectStandardInput=true
重定向标准输入。这样,您就不必修改.exe代码。之后,您可以将内容重定向到.exe的标准输入,请参阅。您的代码适合我。请注意,在.exe代码中,有一行:
Console.Read();
因此,程序将等待用户输入一行,然后才退出。如果不这样做,其他代码将按照您所描述的那样等待应用程序终止
因此,您应该删除该行并重试
Christian.K在评论中指出的另一种可能性是使用processInfo.RedirectStandardInput=true
重定向标准输入。这样,您就不必修改.exe代码。之后,您可以将内容重定向到.exe的标准输入,请参见。该.exe代码调用Console.Read()
,它将等待用户输入一行,然后才退出-您考虑到了吗?您没有启动exe-您启动的是cmd.exe
,而这反过来又启动了您的exe,出于某种原因。控制台进程成功完成并返回0
。它不会传回上次执行的任何内容的返回代码。达米恩·阿努斯·阿努斯·阿努斯·阿努斯·阿努斯·阿努斯·阿努斯·阿努斯·阿努斯·阿努斯·阿努斯·阿努斯:你能建议所需的更改吗?这取决于-大概是在早些时候你有.FileName=consoleExePath
和.Arguments=Arguments
。什么,特别是,你是这样做的,你决定把<代码> CMD < /代码>放在中间?DamiiNeth-Ty-UnistiFue:我正在尝试它,没有<代码> CMD。我会把它贴在这里。谢谢。exe代码调用Console.Read()
,它将等待用户输入一行,然后才退出-您考虑到了吗?您没有启动exe-您启动的是cmd.exe
,出于某种原因,它反过来会启动您的exe。控制台进程成功完成并返回0
。它不会传回上次执行的任何内容的返回代码。达米恩·阿努斯·阿努斯·阿努斯·阿努斯·阿努斯·阿努斯·阿努斯·阿努斯·阿努斯·阿努斯·阿努斯·阿努斯:你能建议所需的更改吗?这取决于-大概是在早些时候你有.FileName=consoleExePath
和.Arguments=Arguments
。什么,特别是,你是这样做的,你决定把<代码> CMD < /代码>放在中间?DamiiNeth-Ty-UnistiFue:我正在尝试它,没有<代码> CMD。我会把它贴在这里。谢谢。或者,他可以使用RedirectStandardInput=true
之后,在Start()
之后,p.StandardInput.Close()谢谢,这是一个非常愚蠢的错误。但输出仍然是空白的。我应该把整数值取回来。您能再次提供帮助吗?@AStacker:process exit code(进程退出代码)(在.exe代码中的标志)在p.ExitCode
中,在p.WaitForExit()
call之后可用。schnaader:p.ExitCode始终返回0。即使我已经将返回值硬编码为非零。啊,您正在运行“cmd/c start{0}{1}”,它不采用console.exe的退出代码。尝试直接运行exe,例如processInfo.FileName=@“C:\Test\Console.exe”
和processInfo.Arguments=Arguments
或者,他可以使用RedirectStandardInput=true
之后,在Start()
之后,p.StandardInput.Close()谢谢,这是一个非常愚蠢的错误。但输出仍然是空白的。我应该把整数值取回来。您能再次提供帮助吗?@AStacker:process exit code(进程退出代码)(在.exe代码中的标志)在p.ExitCode
中,在p.WaitForExit()
call之后可用。schnaader:p.ExitCode始终返回0。即使我已经将返回值硬编码为非零。啊,您正在运行“cmd/c start{0}{1}”,它不采用console.exe的退出代码。尝试直接运行exe,例如processInfo.FileName=@“C:\Test\Console.exe”
和processInfo.Arguments=Arguments