我创建了一个打印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打印。
任何关于为什么不起作用的想法?
提前致谢,Esteban。
答案 0 :(得分:4)
您需要文件的完全限定名称,而不仅仅是文件名。服务的默认路径设置为C:\ Windows \ System32(或根据您的操作系统适用)。
更改此行:
proc.StartInfo.FileName = "FoxitReader.exe";
到这个(或者只是硬编码,如果它总是一个固定的路径):
proc.StartInfo.FileName = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "FoxitReader.exe");
答案 1 :(得分:2)
您是否在默认的LocalSystem帐户中运行服务?也许它无法访问打印机。
尝试更改要运行的服务和可以使用FoxitReader正常打印的帐户,看看是否有效。在"登录"上进行更改从Windows服务控制面板小程序配置服务时的选项卡: http://www.powershellinside.com/kb/articles/powershellssh-useraccounts-1.jpg