ProcessWindowStyle.Hidden的进程仍显示按任意键退出?

时间:2012-02-01 19:45:10

标签: c# .net command-line console-application

我有这个:

        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#代码时,我没有看到这个输出文本,这是我想要的,也意味着重定向工作。

我检查过程结束了 - 好像命令窗口本身正在添加这个额外的(不合需要的)步骤。

之前有没有人遇到过这个问题,如果有的话我怎么能摆脱这个?

2 个答案:

答案 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。