【发布时间】:2011-12-07 20:31:10
【问题描述】:
我创建了一个打印 PDF 文件的服务。当我通过 System.Process 对象调用 FoxitReader 并向其发送控制台命令时,该服务什么也不做。我已阅读有关 Session 0 隔离的信息,但我的服务不调用 GUI 应用程序,它只是在可执行文件中执行命令。
这是我的代码:
System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.StartInfo.FileName = "FoxitReader.exe";
proc.StartInfo.Arguments = " /t " + '"' + nombreArchivo + '"' + " " + '"' + nombreImpresora + '"';
EventLog.WriteEntry("InboundServicioImpresion", "Comando impresion:" + proc.StartInfo.FileName + proc.StartInfo.Arguments);
proc.StartInfo.RedirectStandardError = true;
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.UseShellExecute = false;
proc.Start();
proc.WaitForExit();
注意:FoxitReader.exe 包含在服务包中;它与服务安装在同一文件夹中。
当代码说它必须做时,服务启动并写入事件日志,它不会崩溃或抛出任何异常(每个方法都由 try-catch 控制)。此外,它还能够将文件从一个文件夹移动到另一个文件夹。唯一不起作用的是使用 foxit、adobe reader 或 sumatraPDF 进行打印。
知道为什么它不起作用吗?
提前致谢,埃斯特班。
【问题讨论】:
-
您的服务以什么用户身份运行?打印机是在尝试打印到服务所在机器的本地还是网络打印机?
-
您正在重定向输出但没有读取它。这足以导致程序死锁,等待有人解除它的输出。只是不要重定向。
-
双击服务->登录选项卡->勾选“允许服务与桌面交互”复选框
标签: c# visual-studio-2010 windows-services