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

11
在运行来自C#控制台程序的以下代码时,我遇到了错误信息。

"系统找不到指定的文件"

以下是代码:

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

奇怪的是,当我省略/c开关时,命令可以运行!?!
有任何想法我做错了什么吗?

我有同样的问题,但是来自命令行:U:>cmd.exe Microsoft Windows [版本 6.1.7601] 版权所有 (c) 2009 Microsoft Corporation。保留所有权利。 系统找不到指定的路径。 - Edmondo
7个回答

11

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

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

7

首先,你正在硬编码路径,这已经注定会在某些系统上出现问题(并非每个Windows安装都在C:\ Windows中)。

但这里的问题是那些反斜杠被用作转义字符。有两种方法可以编写这样的路径字符串 - 转义反斜杠:

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

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

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

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

3
我看到你发布的代码存在三个问题: 1)你没有正确转义路径字符串 2)你需要将/c参数分别传递给要执行的路径 3)你假设运行该代码的每台计算机都安装了c:\windows
我建议重写代码如下:
string cmdPath = System.IO.Path.Combine(Environment.SystemDirectory,"cmd.exe");
System.Diagnostics.Process.Start(cmdPath, "/c"); 

3

有一个重载的开始函数需要参数。请使用该函数。

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

0

你需要在路径前面加上 @ 符号。像这样:@"C:\Windows\System32\cmd.exe /c"


0

我相信问题在于你试图将一个参数 (/c) 作为路径的一部分传递。

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

尝试:

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

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


-1
最简单的方法是使用"添加现有项"并输入程序来将程序添加到解决方案中。
System::Diagnostics::Process::Start("ccsetup305.exe");

似乎没有回答所提出的问题。OP与命令行参数有关,而您并没有展示它们。 - cHao

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接