从 Windows 2012 上运行的服务进行 Web 浏览器打印

Posted

技术标签:

【中文标题】从 Windows 2012 上运行的服务进行 Web 浏览器打印【英文标题】:Web browser print from service running on windows 2012 【发布时间】:2013-12-21 19:58:52 【问题描述】:

我们有一个自动打印服务作为系统帐户打印网页 URL 运行。 这个想法是使用WebBrowser 加载页面并在加载完成后调用Print。

这在 Server 2003 、 2008r2 等上运行良好,但仅当它作为服务运行时才在 Server 2012 上运行。作为控制台应用程序运行正常。

问题:

它可以很好地加载网页并调用 Print() , Print() 将返回,但默认打印机上不会打印任何内容:根本没有打印作业。

我认为这将是帐户问题,所以我尝试以相同的登录用户身份运行服务,但仍然无法正常工作,如果该用户将应用程序作为控制台应用程序运行,那么它会正常工作。因此默认打印机和用户帐户被排除在外。

我认为这不是代码问题(但肯定是这样),因为它适用于作为服务运行的旧 Windows 版本。

似乎服务器 2012 中的服务进程发生了一些根本性的变化。

更新1。 可能与How do I print an html document from a web service?有关

但是它在我之前的服务器 2012 上工作得很好。

更新 2. 即使整个打印发生在一个单独的进程中,它也不起作用,即我的服务启动了一个打印进程,它也不起作用。如果我在控制台模式下运行相同的代码,一切正常。这绝对不是线程问题,而是服务器 2012 中的问题。

现在的问题是:

改变了什么?为什么它停止工作?

【问题讨论】:

与论坛网站不同,我们不使用“谢谢”、“感谢任何帮助”或Stack Overflow 上的签名。请参阅“Should 'Hi', 'thanks,' taglines, and salutations be removed from posts?. @JohnSaunders 感谢您让我知道下次我可以节省输入 6 个字符和您编辑它的时间。哦等等,这个“谢谢”在评论的顶部。 这是***.com/questions/15834064/…的副本 【参考方案1】:

在http://social.msdn.microsoft.com/Forums/windowsdesktop/en-US/fdcfa0fa-50aa-4a61-be79-5b4c8f65fbf7/,我们看到这已报告给 Microsoft,并确认为 Windows 8 和 Windows Server 2012 中的错误。

在非标准用户会话(例如服务)中尝试从 32 位进程打印时会触发此错误。

据 Microsoft 称,此错误已在 Windows 8.1 和 Windows Server 2012 R2 中得到解决。但是,我们仍然可以在 Windows 8.1 上重现它。

在同一站点上,Microsoft 提供了一种解决方法。此解决方法为我们在 Windows 8.1 上解决了问题。它可能也适用于 Windows 8 和 Windows Server 2012。

解决方法如下:

    打开 Regedit 并转到 HKEY_CLASSES_ROOT\CLSIDBA7C0D29-81CA-4901-B450-634E20BB8C34

    检查“AppID”注册表项的值。在我们的例子中,这是 AA0B85DA-FDDF-4272-8D1D-FF9B966D75B0

    现在转到 HKEY_CLASSES_ROOT\AppIDAA0B85DA-FDDF-4272-8D1D-FF9B966D75B0(或您在系统上找到的相应值) 在此注册表项下,删除名称为“AccessPermission”、“LaunchPermission”和“RunAs”的条目

由于这是 Windows 中的错误,因此您无法在代码中修复它。该解决方法可能会产生副作用,但到目前为止,我们还没有在我们的场景中看到任何副作用。

【讨论】:

以上是关于从 Windows 2012 上运行的服务进行 Web 浏览器打印的主要内容,如果未能解决你的问题,请参考以下文章

使用 PHP 在运行 Windows Server 2012 的物理服务器上连接到 SQL Server 2012

给WPF程序添加以Windows服务的方式运行的功能

w10企业版iis服务器在哪而且在windows功能中找不到

在 Windows Server 2012 上的 .NET 4.0 上运行服务构建时出现 System.Configuration.ConfigurationException

AWS Backup 能否与在 EC2 实例上运行 Oracle 的 Windows 2012 服务器一起使用?

如何使用 WinAPI 和 C++ 从 Windows 系统上的服务通知客户端应用程序?