3

私はC#プログラミングが初めてです。アプリケーションに 1 つのテキスト ボックスと 1 つの送信ボタンを含めて、バッチ ファイルを実行したいと考えています。

ファイルは d:\XMLupdate.bat ですが、プログラムはコマンド ラインでファイルに番号を追加します (例: d:\XMLupdate.bat 10 または d:\XMLupdate.bat 15)。

もう1つのことは、送信が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");
            }
        }

    }

私の主な質問はプロセスメソッドについてです。そのように実行できますか? ありがとう

4

4 に答える 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();
于 2011-01-21T22:13:10.260 に答える
2

「そのように実行できますか?」

  1. ソリューションはコンパイルされますか?
  2. もしそうなら、あなたがそれを実行するとどうなりますか?

私がすぐに気づいたのはこの行です

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

バッチファイルと次の引数の間にスペースが必要です。

 p.StartInfo.Arguments = "xmlupdate.bat " + int.Parse(textBox1.Text);
于 2011-01-21T22:10:53.437 に答える
0

エリックの答えに加えて、代わりにNumericUpDownコントロールを使用することをお勧めします。

于 2011-01-21T22:19:18.073 に答える
0

おそらく、プロセスの標準出力とエラーもフックし、それらをリダイレクトして、生成された出力の通知を受け取ることをお勧めします。記録しておくと便利です。

また、標準入力もフックしたいかもしれませんが、それが期待している入力がわかっている場合に限ります (プロセスが入力を必要としているときにイベントが発生することはありません: 先制的にそれを提供しています)。

したがって、バッチ ファイル/子プロセスが入力を必要としていて、それを提供できない場合、子プロセスは永久にハングします。

于 2011-01-21T23:10:08.717 に答える