【问题标题】:Argument for ProcessStartInfo needs quotes, always escapesProcessStartInfo 的参数需要引号,总是转义
【发布时间】:2016-03-23 20:18:55
【问题描述】:

如果我在命令提示符下运行以下命令,它会起作用:

"C:\Program Files (x86)\AppFolder\do.exe"

如果我尝试运行与进程相同的东西:

        ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
        startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
        startInfo.FileName = "cmd.exe";
        startInfo.Arguments = @"/c ""C:\Program Files (x86)\AppFolder\do.exe""";

        using (Process process = Process.Start(startInfo))
        {
          ...
        }

它似乎没有运行。如果我查看 startInfo.Arguments,它显示如下:

/c \"C:\\Program Files (x86)\\AppFolder\\do.exe\"

我错过了什么?你不能传递带有引号或空格的参数吗?我看到很多例子,人们通过空格/引号很好地传递项目,但跟随它们似乎不起作用。这是我能想到的最窄的例子。

编辑:如果我只是创建一个快捷方式而不使用空格或引号,它就可以工作:

startInfo.Arguments = @"/c D:\_test\Do.lnk";

【问题讨论】:

  • 它似乎没有运行。它似乎没有运行?尝试删除隐藏窗口样式并将/c 选项更改为/k 选项。我敢打赌,您会在控制台窗口中看到一条错误消息,该消息现在仍然存在。

标签: c# process processstartinfo


【解决方案1】:

我不使用“@”。这是正确的实现:

startInfo.Arguments = "/c \"C:\\Program Files (x86)\\AppFolder\\do.exe\"";

【讨论】:

  • "/c \"C:\\Program Files (x86)\\AppFolder\\do.exe\""@"/c ""C:\Program Files (x86)\AppFolder\do.exe""" 完全相同。如何转义反斜杠和引号并不重要。
猜你喜欢
  • 2018-08-03
  • 2011-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-25
相关资源
最近更新 更多