簡體   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