【问题标题】:Why my Windows Service can't execute an external application?为什么我的 Windows 服务无法执行外部应用程序?
【发布时间】: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


【解决方案1】:

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

改变这一行:

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

为此(或者如果它始终是固定路径,则只需对其进行硬编码):

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

【讨论】:

  • 感谢您的回答,Russell,我已经对我的代码进行了更改,但它仍然没有打印出来。
  • 好吧,如果您确信自己实际上正在执行正确的可执行文件,那么您应该捕获标准输出和错误并查看它们的含义。
【解决方案2】:

您是否在默认的 LocalSystem 帐户中运行您的服务?也许它无权访问打印机。

尝试更改服务以使用通常可以使用 FoxitReader 打印的帐户运行,看看是否有效。从 Windows 服务控制面板小程序配置服务时,在“登录”选项卡上进行更改: http://www.powershellinside.com/kb/articles/powershellssh-useraccounts-1.jpg

【讨论】:

  • 你好,CoreTech。是的,我的服务配置为在 te LocalSystem 帐户下运行。
  • 您可以尝试将其设置为用户帐户,看看是否有效? (当然是可以访问打印机的帐户。)
  • 谢谢!这是与用户相关的麻烦。当我将用户帐户更改为我自己的用户后,该过程就可以开始了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-25
  • 1970-01-01
  • 2014-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多