在Windows服务模式下运行GUI应用程序

时间:2010-04-05 21:50:05

标签: windows user-interface firefox windows-services

我正在编写一个作为Windows服务运行的服务器,通过请求调用Firefox生成网页的pdf快照。

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

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

由于要求pdf服务器的打开用户会话运行是不切实际的,除了从虚拟机运行整个事件之外,还有其他解决方法吗?

更新:我认为问题不在于帐户权限,而是在服务模式下运行时FF正在等待的隐形模式对话框。

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

4 个答案:

答案 0 :(得分:7)

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

如果您尝试此操作,请不要忘记使用STAThread属性。

答案 1 :(得分:0)

我遇到了类似的难题,MS Word无人值守。您需要做的是以您设置的用户身份登录以用于运行firefox进程并完成设置打印机的过程。

有可能只是以该用户身份登录就足够了 - 在第一次登录时会执行一些操作。

我道歉我不够清楚 - 我的意思是你必须使用该帐户以交互方式登录,配置默认打印机,注销,然后运行您的服务

答案 2 :(得分:0)

几年前我遇到了一个相关的问题:伪设备上的共享网络打印机启动Ghostscript以进行PS-> PCL转换并打印到真正的打印机。打印后台处理程序服务作为本地系统运行,并且伪设备驱动程序无法从服务模式执行Ghostscript。我能够通过将几个注册表项从HKCU-hive复制到HKLM来解决问题。

答案 3 :(得分:0)

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