Запретить закрытие программы при выходе из процесса C # - PullRequest
0 голосов
/ 29 ноября 2018

У меня есть пакетный файл, который я запускаю через процесс, но когда пакетный файл завершает работу и закрывает форму, он также закрывается.Как я могу предотвратить процесс закрытия формы.Вот код.

Process support = new Process();
                        support.StartInfo.FileName = @"C:\Support\Support.bat";
                        support.EnableRaisingEvents = true;
                        support.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
                        support.StartInfo.CreateNoWindow = true;
                        support.StartInfo.UseShellExecute = false;
                        support.OutputDataReceived += new DataReceivedEventHandler(OutputHandler);
                        support.StartInfo.RedirectStandardOutput = true;
                        support.Start();
                        support.BeginOutputReadLine();

Вот обработчик вывода, который записывает выходные данные пакетного файла в richTextbox

private void OutputHandler(object sendingProcess, DataReceivedEventArgs outLine)
    {
        string line;
        line = (outLine.Data.ToString());
        txtStatus.AppendText(line + "\n");

    }

Пакетный файл автоматически закрывается, когда программа завершена, и программа закрывается такжеи никогда не выполнял оставшиеся коды.

Ответы [ 2 ]

0 голосов
/ 29 ноября 2018

Процесс сам откроет окно, и, как только файл .bat выйдет, выйдет и закроет главное окно.Это не ваш код, который является неправильным, это по умолчанию способ запуска .bat-файла, если вы просто дважды щелкнули по нему в Проводнике (cmd открывается до тех пор, пока .bat не завершится, а затем снова закрывается)

Вы упомянули, чтоВы пробовали "Process.WaitForExit ()", но я хотел бы отметить, что в вашем контексте это должно быть "support.WaitForExit ()", очень похожее на ваше "dt.WaitForExit ()" (код, который вы опубликовали, который теперь удален)

Если это не сработает, добавьте «PAUSE» в новую строку в файле support.bat.Это также предотвратит закрытие окна до нажатия клавиши.

Если у вас нет доступа для редактирования файла support.bat, все, что вам нужно сделать, это прочитать содержимое файла и временно сохранить его где-нибудь.и затем запустите его ... или добавьте:

using (StreamWriter w = File.AppendText("support.bat"))
{
  w.WriteLine("PAUSE");
}

Выше приведен очевидный пример, вам нужно проверить, является ли "PAUSE" последней строкой, прежде чем снова записывать в файл.Я также не показал код о том, как создать файл и сохранить его, вы должны быть в состоянии справиться с этим:)

0 голосов
/ 29 ноября 2018

Вы можете использовать

Console.ReadLine();

или

Console.ReadKey();

ReadLine () ожидает нажатия клавиши Enter, в то время как ReadKey () ожидает нажатия любой клавиши (За исключением клавиш-модификаторов - Shift, Control, Alt, Command, Option .. и т.д.)

Если это только для тестирования из VS, то вы можете запустить приложение без отладки, используя Ctrl + F5

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...