Process.Start参数不起作用

时间:2016-05-18 16:23:39

标签: c# process system.diagnostics

我在命令行中运行此应用程序并获得所需的结果

 Helpdesk-02.exe /department it

但是我的C#代码(下面)似乎忽略了参数但是在没有命令行开关的情况下启动了应用程序

 ProcessStartInfo psi = new ProcessStartInfo();
 psi.FileName = @"Y:\Helpdesk-02.exe";
 psi.Arguments = @"/department it";
 psi.UseShellExecute = true;
 Process.Start(psi).WaitForExit();

2 个答案:

答案 0 :(得分:5)

@字符是一个特殊的引用字符串,因此它的行为与标准字符串不同。从本质上讲,正在发生的过程是从命令行看起来像这样的过程:

>  Helpdesk-02.exe "/department it"

或一个论点。删除@符号会强制C#按预期解释字符串:

> Helpdesk-02.exe /department it

微妙但关键的区别。

@运算符旨在使处理具有嵌入空格,反斜杠和其他必须在标准字符串中转义的字符的路径变得更加容易。从本质上讲,它会为你逃脱角色。这两个声明是等价的:

 string pathToExplorer = @"C:\Program Files\Internet Explorer\iexplore.exe";
 string escaped = "\"C:\\Program Files\\Internet Explorer\\iexplore.exe\"";

在处理文件路径时,最好只使用@运算符,并在处理参数时使用常规方法。

答案 1 :(得分:0)

ProcessStartInfo州的文档:

  

空格被解释为多个参数之间的分隔符。一个   包含空格的单个参数必须用引号括起来   标记,但这些引号不会传递给目标   应用