2010-04-05 116 views
3

我正在编写一个作为Windows服务运行的服务器,该服务通过请求调用Firefox来生成网页的pdf快照。在Windows服务模式下运行GUI应用程序

我知道这是一个坏主意来运行服务模式的GUI程序,但我的程序的服务器从本质在用户模式下运行它限制。运行用户级“代理”也不是一种选择,因为在运行服务器的机器上可能没有登录交互式用户。

在我的实验Firefox的成功制作PDF时,该服务在一个已经登录的用户帐户下运行。显然,在其他情况下它不起作用:用于未登录的本地系统和用户帐户。在启用“允许服务与桌面交互”选项的LocalSystem下,我可以看到Firefox开始报告无法找到打印机。

因为它不会是实际的需要为PDF服务器运行一个打开的用户会话,有没有除了从虚拟机中运行整个事情的任何解决方法吗?

更新:我觉得这个问题并不是真正用于帐户权限,而是FF在服务模式下运行时等待的隐形模式对话框。

但是,当FF在LocalSystem帐户下运行时,它仍然无法创建pdf。 FF说它找不到打印机,我想知道这是否可以以某种方式启用的权限?

回答

7

你可能想尝试不同的方法,你” d在您的项目中包含一些.NET PDF库(PDFsharp是一个很好的开源项目),并将其与您的项目中包含的WebBrowser控件结合使用以呈现PDF。

不要忘记使用STAThread属性,如果你试试这个。

+1

+1严重的是,正如kzen所说的,你真的应该考虑使用一个创建pdf的组件,而不是打开一个GUI应用来完成它。如果这可以由多个用户调用,那么你正在乞求麻烦。大多数GUI应用程序不是为这种情况而构建的,许多人只是为了遇到争用问题而走上这条路。 不要为他们埋单,但Aspose有许多为这种场景构建的组件,作为PDFSharp的另一个候选者。 我也总是问“为什么PDF”?对于人们来说,这是一个默认的答案,因此他们通常不会问一个更简单的格式是否可行。 – 2010-04-13 21:06:19

+1

不知道原始海报需要什么,这种解决方案不适用于“浏览器”类的情况。如果项目的要点是概述页面的外观,那么使用PDF生成器并不是一个好的选择。 – 2010-04-14 08:37:50

+0

你是对的,基督徒。问题是我需要在将结果保存为PDF之前首先进行可能的闪存和启用js的页面的有效渲染。这意味着我应该坚持使用像Gecko或Webkit这样的现有引擎,或者自己写。幸运的是,使用'cmdlnprint'附加组件的FF解决了这两个问题。但将这个捆绑服务作为服务运行是主要挑战。 – Leonid 2010-04-16 20:39:17

0

我已经经历了一个与无人值守的MS Word运行类似的难题。你需要做的就是以你设置用来运行firefox进程的用户身份登录,并完成设置打印机的过程。

这可能是刚登录的用户也就足够了 - 还有就是第一次登录时进行了一些东西。

我很抱歉,我不是很清楚 - 我的意思是,你必须登录交互使用该帐户,设置默认打印机,注销,然后运行服务

+0

是的,实际上这已经为我工作。正如我在第3段中提到的,GUI应用程序在登录帐户下运行得很好。 但我不能靠打开的用户会话,因为用户可能最终决定注销或只是忘了登录 – Leonid 2010-04-06 17:47:20

+1

@Leonid:你的服务在它自己的登录会话,而不是交互式会话中运行,所以它不无论用户注销,都无关紧要。 – 2010-04-13 22:26:15

+0

谢谢,本。事实上,上周我发现我的问题并不是无法在非活动帐户下启动时无法打印,而是出现在模式对话窗口中,因为它在服务模式下运行,所以无法看到它。现在,它可以在任何除LocalSystem外的帐户。它仍抱怨无法找到任何打印机(即使我使用虚拟打印机 - 请参阅我对cmdlnprint FF插件的其他评论)。 – Leonid 2010-04-16 20:43:25

0

一对夫妇一年以前,我有一个相关的问题:共享网络打印机伪设备上PS-> PCL翻译和印刷到真正的打印机启动Ghostscript的。打印后台处理程序服务作为本地系统运行,而伪设备驱动程序服务器在服务模式下执行Ghostscript时遇到问题。我能够通过将HKCU-hive中的几个注册表项复制到HKLM来解决问题。

+0

谢谢你,埃德加。这似乎是一个好主意,但我试图尽可能地侵入用户的环境。 – Leonid 2010-04-16 20:46:22

0

您可以将程序作为计划任务来运行吗?该任务可以分配给一个给定的用户帐户,该帐户应该可以解决服务限制。

+0

因为我认为这个问题并不是真正用于帐户权限,而是用一个不可见的模式对话框,这不再是一个问题。不过,我相信这也可能起作用。 – Leonid 2010-04-16 20:48:06

相关问题