从 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
w10企业版iis服务器在哪而且在windows功能中找不到
在 Windows Server 2012 上的 .NET 4.0 上运行服务构建时出现 System.Configuration.ConfigurationException