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

时间:2010-03-13 15:27:41

标签: c# cmd

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

  

“系统无法找到该文件   指定的“

以下是代码:

  

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

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

任何想法我做错了什么?

7 个答案:

答案 0 :(得分:11)

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

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

答案 1 :(得分:7)

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

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

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

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

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

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

答案 2 :(得分:3)

开始采取争论的重载。请改用它。

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

答案 3 :(得分:3)

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

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

我建议写如下:

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

我认为问题是你试图传递一个参数(/ c)作为路径的一部分。

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

尝试

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

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

答案 6 :(得分:-1)

最简单的方法是使用ADD EXISTING ITEM并键入

将程序添加到解决方案中
System::Diagnostics::Process::Start("ccsetup305.exe");