2011-01-21 2 views
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

ответ

2

«Могу ли я это исполнить?»

  1. Составлено ли ваше решение?
  2. Если да, что происходит, когда вы запускаете его?

На что я заметил, с места в карьер эта линия

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

Вам нужно пространство между командным файлом и следующий аргумент.

p.StartInfo.Arguments = "xmlupdate.bat " + int.Parse(textBox1.Text); 
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(); 
+0

+1 Я пропустил c: \ temp escaping. –

0

Помимо ответа Эрика, я бы предложил вместо этого использовать NumericUpDown.

0

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

Вы также можете подключить стандартный ввод, а также, но только если вы знаете, что вход его ожидает (вы не получите событие вызывается, когда процесс хочет ввода:. Вы превентивно обеспечить его)

Поэтому, если ваш пакетный файл/дочерний процесс требует ввода, и вы не можете его предоставить, дочерний процесс будет зависать вечно.

Смежные вопросы