【问题标题】:How to send multiple parameters to exe from c# code如何从c#代码向exe发送多个参数
【发布时间】:2015-05-21 02:32:44
【问题描述】:

我正在尝试从 C# 代码调用 exe。如果我像下面这样从命令提示符运行 exe,它工作正常

C:\abc\abc.exe -e dev -l line1 -q 1

我试图通过传递所有三个参数来调用同一个 exe,但如果我在 Trace 中看到它,则没有一个参数会传递给 exe。谁能告诉我如何通过它。

这里是代码

string[] cParams = new string[] { "dev", "Line1", "1" };

ProcessStartInfo startInfo = new ProcessStartInfo(string.Concat(exePath, "abc.exe"));
startInfo.Arguments = "\"" + cParams[0] + " " + cParams[1] + " " + cParams[2] + "\"";
startInfo.RedirectStandardOutput = true;    
startInfo.UseShellExecute = false;
System.Diagnostics.Process.Start(startInfo);

【问题讨论】:

  • 不带引号试试:startInfo.Arguments = " " + cParams[0] + " " + cParams[1] + " " + cParams[2];

标签: c# c#-4.0 exe


【解决方案1】:

如果您查看您的参数字符串,它会出现在"dev Line1 1"。这相当于调用

C:\abc\abc.exe "dev Line1 1"

你可以简化你的论点:

startInfo.Arguments = "-e dev -l line1 -q 1";

或者修复您正在构建的字符串以删除引号,并附加您的“-e”、“-l”等:

startInfo.Arguments = string.Format("-e {0} -l {1} -q {2}", cParams[0], cParams[1], cParams[2]);

【讨论】:

    【解决方案2】:

    通过将其括在引号中,您实际上只传递了一个参数。您还忽略了开关(-e-l-q)。我相信你想要:

    ProcessStartInfo startInfo = new ProcessStartInfo(string.Concat(exePath, "abc.exe"));
    startInfo.Arguments = "-e dev -l line1 -q 1";
    

    或者如果你的“参数”来自数组:

    startInfo.Arguments = string.Format("-e {0} -l {1} -q {2}", cParams);
    

    【讨论】:

      【解决方案3】:

      您将所有参数都用引号括起来。如果您将每个参数单独括在引号中,它应该可以工作。

      【讨论】:

      • 为什么这些正确的答案在没有评论的情况下被否决?
      • 也许是因为不需要将它们包装在单独的引号中,答案是删除现有的引号?这个答案没有给出如何修复它的例子。尝试写更长更精确的答案。只是一个想法。
      • 你也没有提到开关不见了。
      • @Thomas,也许尝试理解答案。正确的做法实际上是将每个参数用引号括起来,因为它们可能包含空格。如果你真的按照我给出的建议去做,你会发现它是有效的。虽然我确实错过了开关,但按照我的建议会导致不同的错误并且更接近最​​终解决方案。否决票是可笑的。
      • 好吧,我没有投反对票。你想知道一个原因,所以我给了你一个。关于引号:如果其中一个参数已经包含引号,您会怎么做?那你怎么逃避呢?你看,答案没那么简单。
      猜你喜欢
      • 2015-09-18
      • 2011-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-05
      • 2014-09-15
      相关资源
      最近更新 更多