繁体   English   中英

从C#运行CMD.exe时,系统找不到指定的文件

[英]The system cannot find the file specified when running CMD.exe from C#

从C#控制台程序运行以下代码时收到错误消息。

“该系统找不到指定的文件”

这是代码:

System.Diagnostics.Process.Start(“C:\\ Windows \\ System32 \\ cmd.exe / c”);

奇怪的是,当我省略/ c开关时,命令可以运行!?!

我有什么想法我做错了吗?

Process.Start将文件名作为参数。 将参数作为第二个参数传递:

System.Diagnostics.Process.Start(@"C:\Windows\System32\cmd.exe", "/c");

好吧,首先,你是一个硬编码的路径,它已经注定要破坏某人的系统(并非每个Windows安装都在C:\\Windows )。

但问题是这些反斜杠被用作转义字符。 有两种方法可以像这样写一个路径字符串 - 要么转义反斜杠:

Process.Start("C:\\Windows\\System32\\cmd.exe", "/c");

或者使用@来禁用反斜杠转义:

Process.Start(@"C:\Windows\System32\cmd.exe", "/c");

您还需要将/c作为参数传递,而不是作为路径的一部分 - 使用Process.Start的第二个重载,如上所示。

有一个超载的开始采取争论。 请改用它。

System.Diagnostics.Process.Start(@"C:\Windows\System32\cmd.exe",  "/c");

我发现你发布的代码有三个问题:

1)您没有正确地转义您的路径字符串
2)您需要将/ c参数单独传递给要执行的路径
3)您假设此代码运行的每台机器都有ac:\\ windows安装

我建议写如下:

string cmdPath = System.IO.Path.Combine(Environment.SystemDirectory,"cmd.exe");
System.Diagnostics.Process.Start(cmdPath, "/c"); 

你需要在路径前添加@。 像这样:@“C:\\ Windows \\ System32 \\ cmd.exe / c”

我相信问题是你试图传递一个Argument(/ c)作为路径的一部分。

参数和文件名是Process类中的两个不同项。

尝试

System.Diagnostics.Process.Start("C:\Windows\System32\cmd.exe",  "/c");

http://msdn.microsoft.com/en-us/library/h6ak8zt5.aspx

最简单的方法是使用ADD EXISTING ITEM和类型将程序添加到解决方案中

System::Diagnostics::Process::Start("ccsetup305.exe");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM