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)单击“转换”按钮之一,它将获取.exe所在的位置。

2) 使用命令行参数在该 .exe 上执行,例如:

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

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

感谢大家的阅读,我希望你们都可以提供一些意见,我应该在哪里寻找解决办法。

4

1 回答 1

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);

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

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

于 2013-05-06T17:59:40.770 回答