无法获取多个命令行参数以在Windows窗体中运行

时间:2013-05-06 01:50:28

标签: winforms c#-4.0 command-line-arguments

这整个周末一直困扰着我...我对此有点新意,所以请耐心等待。

我试图让这个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(密码)

我一直在网上搜索,想弄清楚如何让它工作,但无济于事。我认为这可能是一个简单的解决方案,也许我是N00B,但我正在努力改善。

感谢所有人阅读,我希望大家都能提供一些关于我应该在哪里找到解决方案的信息。

1 个答案:

答案 0 :(得分: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);

您需要引号的原因是用户提供的值可能包含空格和空格来区分命令行参数。

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