2012-08-23 57 views
1

我嘗試過使用C#運行此特定DOS命令的各種方法。我不想使用批處理文件。無論我嘗試什麼,它都只會從打印機名稱中取出第一個單詞,而不是整個名稱,在這種情況下,它表示打印機POS未連接,而不是說打印機POS Lexmark未連接。錯誤可能是什麼?多謝你們!如何運行特定的DOS命令

的DOS命令是:

rundll32 printui, PrintUIEntry /o /n "POS Lexmark" 

我的代碼如下:

string command = string.Format("/c rundll32 printui, PrintUIEntry /o /n" + " POS Lexmark"); 
ProcessStartInfo cmdsi = new ProcessStartInfo("cmd.exe"); 
cmdsi.Arguments = command; 
cmdsi.CreateNoWindow = false; 
Process cmd = Process.Start(cmdsi); 
+0

這不是DOS。它甚至沒有控制檯或cmd.exe。這是一個Win32過程。在今天的Windows上沒有DOS。 –

回答

5

你忘了包括圍繞POS利盟報價:

string command = string.Format("/c rundll32 printui, PrintUIEntry /o /n" + "\" POS Lexmark\""); 
+0

+1,因爲你是對的,這是一個很好的答案,但如果你解釋了爲什麼重要,如果OP不理解,這將是一個更好的答案。 ;-) – David

+0

謝謝!這很快,是的,它現在正常工作! :) – Kimi

+0

好的,大衛,我會解釋 - 命令解析器通常使用空格分隔參數,因此程序將/ n後的參數作爲「POS」,而不是「POS Lexmark」,並將「Lexmark」一個單獨的論點,它可能被忽略了。但是,您可以通過在參數周圍添加引號來覆蓋此行爲 - 通常在將「Program Files」或「Documents and Settings」中的文件傳遞到命令行程序時使用。至於引號之前的反斜槓,需要將引號轉義,以便它們不會過早地終止C#代碼中的字符串。 – ekolis