Процесс с ProcessWindowStyle.Hidden все еще показывает Нажмите любую клавишу, чтобы выйти? - PullRequest
1 голос
/ 01 февраля 2012

У меня есть это:

        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 #, что я хочу, а также означает, что перенаправление работает.

Я проверил, и процесс завершен - как будто само командное окно добавляет этот дополнительный (нежелательный) шаг.

Кто-нибудь сталкивался с этим раньше, и если да, то как мне от этого избавиться?

1 Ответ

0 голосов
/ 02 февраля 2012

Похоже, что программа, которую вы запускаете, в конце вызывает систему («ПАУЗА»), вызывая новый процесс, который печатает сообщение «Нажмите любую клавишу, чтобы продолжить ...» и ожидает ввода пользователя. Я не могу точно воспроизвести вашу ситуацию, но вы можете попробовать это.

        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);
        }
...