C# 进程。以不起作用的参数开始

C# 进程。以不起作用的参数开始,c#,process,system.diagnostics,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;

我在命令行中运行这个应用程序,并得到了期望的结果

 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();
各国的文件:

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


@
字符是一个特殊的带引号的字符串,因此其行为与标准字符串不同。从本质上讲,所发生的事情是从命令行开始的:

>  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\"";

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

由于没有可执行文件,因此我们无法测试此操作。您确定手动运行它会得到所需的结果吗?您是否可以调试“Helpdesk-02.exe”以检查参数a)读取和b)解析是否正确?如果使用
进程,它是否有效。Start(String,String)
方法传递参数?听起来很愚蠢,但您是否在没有
@
字符的情况下尝试过它?此外,您可能需要
psi.WindowStyle=ProcessWindowStyle.Minimized删除了@并且它工作了。谢谢,不是这样的。