为什么我的Windows服务无法执行外部应用程序?

时间:2011-12-07 20:31:10

标签: c# visual-studio-2010 windows-services

我创建了一个打印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。

2 个答案:

答案 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

相关问题