Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Windows服务模式下运行GUI应用程序_Windows_User Interface_Firefox_Windows Services - Fatal编程技术网

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

在Windows服务模式下运行GUI应用程序,windows,user-interface,firefox,windows-services,Windows,User Interface,Firefox,Windows Services,我正在编写一个作为Windows服务运行的服务器,通过请求调用Firefox生成网页的pdf快照 我知道在服务模式下运行GUI程序是个坏主意,但我的程序的服务器特性限制了它在用户模式下运行。运行用户级别的“代理”也不是一个选项,因为可能没有交互用户登录到运行服务器的计算机上 在我的实验中,当服务在已经登录的用户帐户下运行时,Firefox成功地生成了pdf。显然,它在其他情况下不起作用:对于未登录的本地系统和用户帐户。在启用了“允许服务与桌面交互”选项的LocalSystem下,我可以看到Fir

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

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

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

既然pdf服务器需要一个开放的用户会话才能运行是不现实的,那么除了从虚拟机上运行整个过程之外,还有其他解决方法吗

更新:我发现问题并不在于帐户权限,而是FF在服务模式下运行时等待的不可见模式对话框


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

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

有可能仅仅以该用户的身份登录就足够了——在第一次登录时会执行一些操作


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

您可能希望尝试另一种方法,其中包括一些.NET PDF库(这是一个不错的开源选择)在您的项目中,然后将其与WebBrowser控件结合使用,您还可以将其包含在项目中以呈现PDF


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

几年前,我遇到了一个相关问题:虚拟设备上的共享网络打印机启动Ghostscript进行PS->PCL翻译并打印到真实打印机。后台打印程序服务作为本地系统运行,伪设备驱动程序无法从服务模式执行Ghostscript。我可以通过将几个注册表项从HKCU配置单元复制到HKLM来解决这个问题。

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

是的,事实上,这已经对我起作用了。正如我在第3段中提到的,GUI应用程序在登录帐户下运行良好。但是我不能依赖于打开的用户会话,因为用户可能最终决定注销或忘记登录。@Leonid:您的服务在自己的登录会话中运行,而不是在交互会话中运行,因此用户是否注销无关紧要。谢谢您,Ben。事实上,上周我发现我的问题不在于FF在非活动帐户下启动时无法打印,而是在服务模式下运行时无法看到的模式对话框窗口中。。现在它可以在除LocalSystem之外的任何帐户下工作。它仍然抱怨找不到任何打印机(即使我正在使用一个虚拟打印机——见我的另一个关于CMDLNFr.FF AdDon的评论)。1严肃地说,正如KZEN提到的,你真的应该考虑使用一个创建PDF的组件,而不是打开一个GUI应用程序来做它。如果可以由多个用户调用,那么您就是在自找麻烦。大多数GUI应用程序都不是针对这种情况构建的,许多人在这条路上遇到了争用问题。不必为他们推诿,但Aspose为这种场景构建了许多组件,作为PDFSharp的另一个候选组件。我也总是问“为什么是PDF”?对于人们来说,这是一个默认答案,他们通常不会问一个更简单的格式是否合适。如果不知道原始海报想要什么,这种解决方案在“浏览快照”类型的情况下是不起作用的。如果项目的目的是获得页面外观的概览,那么使用PDF生成器并不是很好的答案。你说得对,Christian。问题是,在将结果保存到PDF之前,我需要首先对可能启用flash和js的页面进行有效渲染。这意味着我要么坚持使用Gecko或Webkit这样的现有引擎,要么自己编写。幸运的是,带有“cmdlnprint”插件的FF解决了这两个问题。但将此捆绑包作为服务运行是主要的挑战。谢谢你,Edgar。这似乎是一个好主意,但我正在尝试尽可能少地侵入用户的环境。因为我认为问题并不真正在于帐户权限,而在于不可见的模式对话框,所以这不再是一个问题。不过,我相信这也可能奏效。