2013-05-06 87 views
1

这整个周末一直在扰乱我......我有点新,所以请耐心等待。无法获取多个命令行参数在Windows窗体中运行

我想获得这个窗体窗体按钮来执行我传递给它的命令行参数,但它不工作。它只是停留在工作目录...

private void convert_Click(object sender, EventArgs e) 
{ 
     string safeFile = @textBox2.Text; 
     string safePass = @textBox3.Text; 
     string safeDir = @textBox4.Text; 

     Process test = new Process(); 
     test.StartInfo.FileName = "cmd.exe"; 
     test.StartInfo.UseShellExecute = false; 
     test.StartInfo.WorkingDirectory = @safeDir; 
     test.StartInfo.Arguments = "sqltosafe.exe" + @safeFile + "-password" + @safePass; 
     test.StartInfo.RedirectStandardOutput = true; 
     test.Start(); 
     textBox1.Text = test.StandardOutput.ReadToEnd(); 
    } 

应用程序应该:

1)其中的“转换”按钮clicke,它会抢在.exe文件所在的位置。

2)执行在与所述命令行参数诸如.EXE:

C:\ SafetoSQL \ SafetoSQL.exe(.safe文件的位置)-password(密码)

I”我一直在搜索整个网络,弄清楚如何让它工作,但无济于事。我认为这可能是一个简单的解决方案,也许我是一个N00B在这个,但我正在努力变得更好。

谢谢大家的阅读,我希望你们都能提供一些关于我应该在哪里寻找的信息。

+2

当您将WorkingDirectory更改为指向您发布参数的文件夹时会发生什么? – 2013-05-06 01:57:19

+0

它会转到那个.exe所在的文件夹(这很好),但它不会执行“test.StartInfo.Arguments”中的参数 – jhonny 2013-05-06 02:11:24

+0

当您调用的进程被调用时,您将引用该命令线参数。确保参数不一起运行,即您没有像command =“run.exe”c:\ somefile.txt-password“”password“的情况。 – 2013-05-06 15:44:59

回答

0

看起来您无法为命令行参数添加空格和引号。

test.StartInfo.Arguments = "sqltosafe.exe" + @safeFile + "-password" + @safePass; 

应该是:

test.StartInfo.Arguments = "sqltosafe.exe \"" + safeFile + "\" -password \"" + safePass + "\""; 

或使用格式字符串而不是串联,这是清晰的,并且不产生中间字符串:

test.StartInfo.Arguments = String.Format("sqltosafe.exe \"{0}\" -password \"{1}\"", safeFile, safePass); 

您需要的报价的原因标记是用户提供的值可能包含空格和空格来删除命令行参数。

您还应该验证用户提供的字符串,以确保至少它们不是空的。