我有这个:
var startInfo = new ProcessStartInfo
{
FileName = _pathToExe,
RedirectStandardOutput = true,
RedirectStandardError = true,
RedirectStandardInput = true,
UseShellExecute = false,
WorkingDirectory = FilepathHelper.GetFolderFromFullPath(_pathToExe),
CreateNoWindow = true,
WindowStyle = ProcessWindowStyle.Hidden
};
try
{
using (_proc = Process.Start(startInfo))
{
_proc.EnableRaisingEvents = true;
_proc.ErrorDataReceived += proc_DataReceived;
_proc.OutputDataReceived += proc_DataReceived;
_proc.BeginErrorReadLine();
_proc.BeginOutputReadLine();
var myStreamWriter = _proc.StandardInput;
var allArgs = "";
foreach (var arg in _args)
allArgs += arg + Environment.NewLine;
myStreamWriter.Write(allArgs);
_proc.WaitForExit();
}
}
catch (Exception e)
{
Console.WriteLine(e);
}
我正在执行别人写的* .exe。对于这个特殊的* .exe - 即使你可以清楚地看到我已经设置了ProcessWindowStyle.Hidden,我仍然会看到一个黑色的窗口,上面写着“按任意键退出”。这个* .exe - 如果我从命令行运行(而不是从我的C#代码中调用它)会产生大量的控制台输出文本。当我运行我的C#代码时,我没有看到这个输出文本,这是我想要的,也意味着重定向工作。
我检查过程结束了 - 好像命令窗口本身正在添加这个额外的(不合需要的)步骤。
之前有没有人遇到过这个问题,如果有的话我怎么能摆脱这个?
答案 0 :(得分:0)
你正在开始的程序似乎是在最后调用系统(" PAUSE"),从而产生一个新的进程,打印出"按任意键继续......&#34 ;消息并等待用户输入。我无法重现你的确切情况,但你可以试试这个。
var startInfo = new ProcessStartInfo
{
FileName = "cmd.exe",
RedirectStandardOutput = true,
RedirectStandardError = true,
RedirectStandardInput = true,
UseShellExecute = false,
CreateNoWindow = true,
};
try
{
Process _proc;
using (_proc = Process.Start(startInfo))
{
_proc.EnableRaisingEvents = true;
_proc.BeginErrorReadLine();
_proc.BeginOutputReadLine();
var myStreamWriter = _proc.StandardInput;
myStreamWriter.WriteLine("D:\\your.exe"); //write your.exe to cmd and press enter :)
_proc.WaitForExit();
}
}
catch (Exception e)
{
Console.WriteLine(e);
}
答案 1 :(得分:0)
来自文档:
要使用 System.Diagnostics.ProcessWindowStyle.Hidden,system.Diagnostics.ProcessStartInfo.UseShellExecute 属性必须为 true。