我正在尝试运行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文件夹中找到lpr程序。
当代码执行时,错误字符串为空,输出字符串包含以下内容(输出的命令与命令运行lpr /?
相同)
输出:
将打印作业发送到网络打印机
用法:lpr -S server -P printer [-C class] [-J job] [-o option] [-x] [-d] filename
选项: -S server提供lpd服务的主机的名称或ipaddress -P printer打印队列的名称 -C类用于突发页面的作业分类 -J作业在突发页面上打印的作业名称 -o选项指示文件的类型(默认情况下假定为文本文件) -x与SunOS 4.1.x及更早版本的兼容性 -d首先发送数据文件
如果我完全按照代码中显示的方式复制并粘贴命令并将其粘贴到命令窗口中,即使它是应用程序打开的SAME命令窗口,它也能正常工作。
有没有人知道为什么会发生这种情况?提前谢谢!
答案 0 :(得分:3)
我能够弄清楚。如果它对其他人有帮助,那么正在运行的代码是
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