c# - Process.Start 参数不起作用

标签 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();

最佳答案

@ 字符是一个特殊的带引号的字符串,因此它的行为不同于标准字符串。本质上,正在发生的事情是从命令行开始的,看起来像这样:

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

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

关于c# - Process.Start 参数不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37305180/

相关文章:

c# - 从设置中将文本 block 内容设置为字符串

C# 客户端与 C++ 服务器通信 - 服务器可以从套接字读取但写入不成功

wcf - 无法记录 WCF 消息正文

c# - 控制台应用程序中的 FileVersionInfo.GetVersionInfo() 不正确

c# - C# 语言规范是否指定是使用方法覆盖还是使用影子?

c# - 为什么在这种情况下编译器不提示?

java - 在java中删除文件

java - 在 Java 中获取特定进程的 CPU 使用率的正确命令行是什么

c - 当我调用 fork() 时如何共享内存?

C# VS2010 在应用程序中判断是否被调试