2011-12-07 47 views
3

我已经创建了一个打印PDF文件的服务。当我通过一个System.Process对象调用FoxitReader,向它发送控制台命令时,该服务什么都不做。我讨论了Session 0隔离,但我的服务不调用GUI应用程序,它只是在可执行文件中执行命令。为什么我的Windows服务无法执行外部应用程序?

这是我的代码:

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控制)。此外,它能够将文件从一个文件夹移动到另一个文件夹。唯一不起作用的是用福克斯,Adobe Reader或sumatraPDF打印。

任何想法为什么它不工作?

在此先感谢,埃斯特班。

+1

运行为哪些用户服务?打印机是否尝试打印到本地服务所在的盒子或者是网络打印机? – user957902

+0

您正在重定向输出但未读取它。这足以导致程序陷入僵局,等待有人释放它的输出。只是不要重定向。 –

回答

2

你在默认运行自己的服务,LocalSystem帐户?也许它无法访问打印机。

尝试改变服务运行和帐户,可以正常打印FoxitReader并看看是否有效。做出的变化,从Windows服务控制面板小程序配置您的服务时,“登录”选项卡: http://www.powershellinside.com/kb/articles/powershellssh-useraccounts-1.jpg

+0

你好,CoreTech。是的,我的服务配置为在LocalSystem帐户下运行。 – t3b4n

+0

你可以尝试将其设置为用户帐户,看看是否有用? (当然可以访问打印机的帐户。) – CoreTech

+0

谢谢!这是一个与用户有关的麻烦。当我将用户帐户更改为我自己的用户时,流程可能会启动。 – t3b4n

4

您需要文件的完全限定名称而不仅仅是文件名。服务的默认路径设置为C:\ Windows \ System32(或者根据您的操作系统而定)。

改变这一行:

proc.StartInfo.FileName = "FoxitReader.exe"; 

本(或只是硬编码它,如果它始终是一个固定的路径):

proc.StartInfo.FileName = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "FoxitReader.exe"); 
+0

感谢您的回答,Russell,我已对我的代码进行了更改,但仍未完全打印。 – t3b4n

+0

好吧,如果您确信自己确实正在执行正确的可执行文件,那么您应该捕获标准输出和错误,并看看他们说了什么。 –

相关问题