Как запустить командный файл в форме C # GUI - PullRequest
5 голосов
/ 15 мая 2011

Как бы вы выполнили пакетный скрипт в форме графического интерфейса в C #

Может ли кто-нибудь предоставить образец, пожалуйста?

Ответы [ 3 ]

5 голосов
/ 15 мая 2011
4 голосов
/ 15 мая 2011

В этом примере предполагается использование приложения Windows Forms с двумя текстовыми полями (RunResults и Errors).

// Remember to also add a using System.Diagnostics at the top of the class
private void RunIt_Click(object sender, EventArgs e)
{
    using (Process p = new Process())
    {
        p.StartInfo.WorkingDirectory = "<path to batch file folder>";
        p.StartInfo.FileName = "<path to batch file itself>";
        p.StartInfo.UseShellExecute = false;
        p.StartInfo.RedirectStandardOutput = true;
        p.StartInfo.RedirectStandardError = true;
        p.Start();
        p.WaitForExit();

        // Capture output from batch file written to stdout and put in the 
        // RunResults textbox
        string output = p.StandardOutput.ReadToEnd();
        if (!String.IsNullOrEmpty(output) && output.Trim() != "")
        {
            this.RunResults.Text = output;
        }

        // Capture any errors written to stderr and put in the errors textbox.
        string errors = p.StandardError.ReadToEnd();
        if (!String.IsNullOrEmpty(errors) & errors.Trim() != ""))
        {
            this.Errors.Text = errors;
        }
    }
}

Обновлено:

Пример вышесобытие нажатия кнопки для кнопки с именем RunIt.На форме есть пара текстовых полей RunResults и Errors, в которые мы записываем результаты stdout и stderr.

1 голос
/ 15 мая 2011

Я сделал вывод, что под выполнением в форме графического интерфейса вы подразумеваете отображение результатов выполнения в некотором UI-Control.

Может быть что-то вроде этого:

private void runSyncAndGetResults_Click(object sender, System.EventArgs e)     
{
    System.Diagnostics.ProcessStartInfo psi =
       new System.Diagnostics.ProcessStartInfo(@"C:\batch.bat");

    psi.RedirectStandardOutput = true;
    psi.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
    psi.UseShellExecute = false;

    System.Diagnostics.Process batchProcess;
    batchProcess = System.Diagnostics.Process.Start(psi);

    System.IO.StreamReader myOutput = batchProcess.StandardOutput;
    batchProcess.WaitForExit(2000);
    if (batchProcess.HasExited)
    {
        string output = myOutput.ReadToEnd();

        // Print 'output' string to UI-control
    }
}

Примервзяты из здесь .

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