2012-08-23 58 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