传递多个参数的正确语法是什么

时间:2016-04-26 09:57:25

标签: c# .net

我有这段代码来启动命令行应用程序:

        private void LaunchCommandLineApp(string latestStudents, string latestTopics)
    {
        // Use ProcessStartInfo class
        ProcessStartInfo startInfo = new ProcessStartInfo();
        startInfo.CreateNoWindow = false;
        startInfo.UseShellExecute = false;
        startInfo.FileName = "ConsoleApplication2.exe";
        startInfo.WindowStyle = ProcessWindowStyle.Hidden;
        startInfo.Arguments = 

        try
        {
            // Start the process with the info we specified.
            // Call WaitForExit and then the using statement will close.
            using (Process exeProcess = Process.Start(startInfo))
            {
                exeProcess.WaitForExit();
            }
        }
        catch
        {
            // Log error.
        }
    }

传递latestStudents&的正确语法是什么?行startInfo.Arguments =中的latestTopics作为参数?我已经尝试了我能想到的一切,但我仍然没有得到它!

4 个答案:

答案 0 :(得分:0)

Arguments是一个字符串,documentation无用地说完全由目标应用程序解释。它确实说现在.NET应用程序会解释它,所以它实际上取决于你正在启动的进程。

知道如何使参数字符串的唯一方法是为您尝试传递它的过程做正确的事情是找出该过程如何处理它的参数(尝试从命令行运行它如果你需要实验)。大多数情况下,你可以期望它们与空格分开。您可以做一些事情(假设C#6):

$"{latestStudents} {latestTopics}"

但这可能不起作用,取决于这些变量中的内容。它们可能需要引用,特别是如果它们本身包含空格。

我真的没有给你肯定的答案。

答案 1 :(得分:0)

它取决于解释参数的程序,但通常如果您将参数与空格分开,那么它们将作为字符串数组呈现给程序。

例如,如果将参数字符串指定为:

SELECT * FROM table 
WHERE CHAR_LENGTH(column) > 4 
      AND column NOT LIKE "%0"

然后,如果程序是C#控制台应用程序,startInfo.Arguments = "one two three \"fo ur\" \"\\\"fi ve\"\\\"" 方法将收到Main(string[] args)数组,如下所示:

args

请注意,我的示例中的连续空格(例如“2”和“3”之间的空格)将被忽略。

另请注意,“fo ur”周围的引号会导致将其作为单个参数传递。

最后请注意,如果要将引号作为参数的一部分传递,则必须使用反斜杠转义它们。当然,在C#中,您必须使用反斜杠和引号,因此在我的示例中,我不得不编写更加笨拙的args[0] == "one" args[1] == "two" args[2] == "three" args[3] == "fo ur" args[4] == "\"fi ve\""

而不是"\"fi ve\""

答案 2 :(得分:0)

ProcessStartInfo参数作为字符串传递,类似于通过命令行运行ConsoleApplication2.exe。

例如,如果您在Windows中打开了一个命令窗口并且运行ConsoleApplication2.exe /help之类的命令窗口,则会传递" / help"作为命令参数。

因此,对于您的情况(并且它取决于ConsoleApplication2.exe的编码方式),您将要执行以下操作:

startInfo.Arguments = latestStudents + " " latestTopics;

...假设ConsoleApplication2.exe按此顺序接受这两个参数。

答案 3 :(得分:0)

示例:

        ProcessStartInfo startInfo = new ProcessStartInfo("argsecho.exe");
        startInfo.WindowStyle = ProcessWindowStyle.Normal;

        // Start with one argument.
        // Output of ArgsEcho:
        //  [0]=/a            
        startInfo.Arguments = "/a";
        Process.Start(startInfo);

        // Start with multiple arguments separated by spaces.
        // Output of ArgsEcho:
        //  [0] = /a
        //  [1] = /b
        //  [2] = c:\temp
        startInfo.Arguments = "/a /b c:\\temp";
        Process.Start(startInfo);

        // An argument with spaces inside quotes is interpreted as multiple arguments.
        // Output of ArgsEcho:
        //  [0] = /a
        //  [1] = literal string arg
        startInfo.Arguments = "/a \"literal string arg\"";
        Process.Start(startInfo);

        // An argument inside double quotes is interpreted as if the quote weren't there,
        // that is, as separate arguments. Equivalent verbatim string is @"/a /b:""string with quotes"""
        // Output of ArgsEcho:
        //  [0] = /a
        //  [1] = /b:string
        //  [2] = in
        //  [3] = double
        //  [4] = quotes
        startInfo.Arguments = "/a /b:\"\"string in double quotes\"\"";
        Process.Start(startInfo);

        // Triple-escape quotation marks to include the character in the final argument received
        // by the target process. Equivalent verbatim string: @"/a /b:""""""quoted string""""""";
        //  [0] = /a
        //  [1] = /b:"quoted string"
        startInfo.Arguments = "/a /b:\"\"\"quoted string\"\"\"";
        Process.Start(startInfo);

当谷歌搜索某些内容时,你会发现它真是太神奇了......

This是我用作上述代码示例源代码的链接。