我是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");
}
}
}
我的主要问题是关于流程方法,我能这样执行吗?谢谢
答案 0 :(得分: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();
答案 1 :(得分:2)
“我能这样执行吗?”
关于我注意到的事情就是这条线
p.StartInfo.Arguments = "xmlupdate.bat" + int.Parse(textBox1.Text);
批处理文件和下一个参数之间需要一个空格。
p.StartInfo.Arguments = "xmlupdate.bat " + int.Parse(textBox1.Text);
答案 2 :(得分:0)
除了Eric的回答,我建议改为使用NumericUpDown控件。
答案 3 :(得分:0)
您可能还希望为该过程挂钩标准输出和错误,重定向它们以便您获得所产生的任何输出的通知。记录它很有用。
您也可能想要挂钩标准输入,但前提是您知道它期望的输入(当流程需要输入时,您不会触发事件:您已抢先提供它。)
因此,如果您的批处理文件/子进程需要输入而您无法提供,则子进程将永久挂起。