[英]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");
最簡單的方法是使用ADD EXISTING ITEM和類型將程序添加到解決方案中
System::Diagnostics::Process::Start("ccsetup305.exe");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.