窗体应用程序如何执行批处理文件

3

我是C#编程的新手。我想要一个包含1个文本框和1个提交按钮的应用程序来执行批处理文件。

该文件为d:\XMLupdate.bat,但程序会在命令行上附加一个数字到文件名中,例如d:\XMLupdate.bat 10或d:\XMLupdate.bat 15

另一件事是提交必须经过验证,只能是1-999或全部(ALL)

以Java方式:

 Runtime rt = Runtime.getRuntime();
                            Process pr = rt.exec(command);
                        }
                else{
                try{
int boxNumber = Integer.parseInt(jTextField1.getText());
                        if((boxNumber > 0) && boxNumber < 1000)
                            {
                                String arguments = jTextField1.getText();
                                String command = "CMD /C start d:/XMLupdate.bat " + arguments;
                                Runtime rt = Runtime.getRuntime();

rt.exec(command);

                            }
                         else{
                            JOptionPane.showMessageDialog(null, "Invalid value entered.");
                            }
 }catch(Exception e)
                        {
                            JOptionPane.showMessageDialog(null, "Invalid value entered.");
                        }
                    }

然而,该机器无法安装JVM。因此,我必须将其构建在exe中。我的编程语言是C#:
以下是源代码:
public partial class Form1 : Form
    {

        //private System.Windows.Forms.TextBox textBox1;  //Input text
        //private System.Windows.Forms.Button button1;   //Sumbit button

        public Form1()
        {
            InitializeComponent();

        }

        private void button1_Click(object sender, EventArgs e)
        {
            //get text
           // string str_inputText = textBox1.Text;
            if (!(textBox1.Text.Equals("")))
            {
                  if (textBox1.Text.Equals("ALL"))
                      {
                          try
                          {

                              Process p = new Process();
                              p.StartInfo.FileName = "CMD.exe"; //Execute command
                              p.StartInfo.WorkingDirectory = "c:\temp"; //Diretory
                              p.StartInfo.Arguments = "xmlupdate.bat" + int.Parse(textBox1.Text);
                              p.Start();

                              p.WaitForExit();

                          }

                          catch (Exception ex)
                          {

                              Console.WriteLine("Exception Occurred :{0},{1}", ex.Message, ex.StackTrace.ToString());
                              MessageBox.Show("Invalid value entered");

                          }
                      }

            }

        }

        private void textBox1_TextChanged(object sender, CancelEventArgs e)
        {


        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            //Check the input number, only allow from 0 until 1000
            try
            {
                int numberEntered = int.Parse(textBox1.Text);
                if (numberEntered < 1 || numberEntered > 10)
                {
                   // e.Cancel = true;

                }
            }
            catch (FormatException)
            {
               // e.Cancel = true;
                MessageBox.Show("You need to enter a number between 1 and 999");
            }
        }

    }

我的主要问题是关于过程方法,我能像这样执行它吗?谢谢。

3
你的代码是否存在特定错误,还是你想知道如果没有尝试代码是否能够正常工作? - JeffO
4个回答

4

不要直接调用cmd.exe,而是可以设置p.UseShellExecute。这适用于批处理文件、HTML文件(启动默认浏览器)等:

[注意:在@"c:\temp"中需要使用@符号,以免反斜杠被视为转义字符。]

      Process p = new Process();
      p.StartInfo.FileName = @"c:\temp\xmlupdate.bat";
      p.StartInfo.WorkingDirectory = @"c:\temp";
      p.StartInfo.Arguments = textBox1.Text;
      p.UseShellExecute=true;
      p.Start();

2

“我可以这样执行吗?”

  1. 你的解决方案能够编译吗?
  2. 如果可以,运行它会发生什么?

我一开始注意到的一件事是这一行。

 p.StartInfo.Arguments = "xmlupdate.bat" + int.Parse(textBox1.Text);

在批处理文件和下一个参数之间需要加上空格。

 p.StartInfo.Arguments = "xmlupdate.bat " + int.Parse(textBox1.Text);

0

除了Eric的答案之外,我建议使用NumericUpDown控件。


0

你可能也想要钩取进程的标准输出和错误,将它们重定向以便你能够收到任何输出产生的通知。记录日志非常有用。

如果你知道进程需要什么样的输入(当进程需要输入时不会触发事件:你必须预先提供它),那么你也可以钩取标准输入。

所以,如果你的批处理文件/子进程需要输入而你无法提供它,那么子进程将永远挂起。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接