我试图运行一个LPR命令打印PDF。我使用的代码是通过在windows窗体应用程序中单击按钮来执行的。
代码:
var command = @"lpr –S 192.168.1.245 –P DAILY C:\Test.pdf";
ProcessStartInfo procStartInfo = new ProcessStartInfo("cmd", "/c " + command);
procStartInfo.RedirectStandardOutput = true;
procStartInfo.UseShellExecute = false;
procStartInfo.RedirectStandardError = true;
procStartInfo.CreateNoWindow = true;
// start process
Process proc = new Process();
proc.StartInfo = procStartInfo;
proc.Start();
proc.WaitForExit();
// read process output
string cmdError = proc.StandardError.ReadToEnd();
string cmdOutput = proc.StandardOutput.ReadToEnd();该程序作为一个x64程序运行,因此它可以在C:\Windows\System32 32文件夹中找到lpr程序。
当代码执行时,错误字符串为空,输出字符串包含以下内容(与命令运行时的lpr /?相同)
输出:
向网络打印机发送打印作业 用途: lpr -S server -P打印机-C类-o选项-d文件名 选项:提供lpd服务的主机的-S服务器名称或-P地址,提供lpd服务的-P打印机名称、打印队列中的-C类职务分类以供在突发页上使用的-J作业名称打印在-J页面上-o选项指示文件的类型(默认情况下假定为文本文件) -x与SunOS 4.1.x和以前的-d发送数据文件的兼容性
如果我完全按照代码中显示的那样复制和粘贴命令,并将其粘贴到命令窗口中,即使它是应用程序打开的相同的命令窗口,它也可以正常工作。
有人能洞察为什么会发生这种事吗?提前感谢!
发布于 2017-09-22 19:05:59
我想出了办法。如果它对其他人有帮助,那么正在工作的代码是
var command = @"lpr -S 192.168.1.245 -P ""DAILY"" ""C:\Test.pdf""";
ProcessStartInfo procStartInfo = new ProcessStartInfo("cmd", "/C " + command);
procStartInfo.RedirectStandardOutput = true;
procStartInfo.UseShellExecute = false;
procStartInfo.RedirectStandardError = true;
procStartInfo.CreateNoWindow = true;
// start process
Process proc = new Process();
proc.StartInfo = procStartInfo;
proc.Start();
proc.WaitForExit();
// read process output
string cmdError = proc.StandardError.ReadToEnd();
string cmdOutput = proc.StandardOutput.ReadToEnd();注意,队列名和文件名被引号包围。我的另一个问题是,我最初是从电子邮件中复制命令的,所以破折号是错误的,我必须删除并手动键入命令中的破折号才能识别它。如果你仔细观察原来的问题,你会发现破折号稍微长了一点。
有关确保lpr命令可用的信息,特别是在64位计算机上运行32位应用程序时,请参见以下参考资料。
参考文献1:lpr command not working from my C# program in Win 7
参考文献2:http://www.tomshardware.com/forum/240019-44-error-windows
https://stackoverflow.com/questions/46352551
复制相似问题