我们有一个自动打印服务作为系统帐户打印网址运行。 我们的想法是使用WebBrowser加载页面并在完成加载后调用Print。
这适用于Server 2003,2008r2等,但仅在Server 2012作为服务运行时才能在Server 2012上运行。作为控制台应用程序运行正常。
问题:
它可以正常加载网页并调用Print(),Print()将返回,但默认打印机上没有打印任何内容:根本没有打印作业。
我认为这将是帐户问题因此我尝试以相同的登录用户身份运行服务但仍然无法正常工作,如果该用户将应用程序作为控制台应用程序运行,那么它将正常工作。因此,默认的打印机和用户帐户被排除在外。
我不认为这是代码问题(必定是这样),因为它适用于作为服务运行的旧版Windows。
对于服务器2012中的服务流程,似乎已经发生了根本性的变化。
更新1。可能与How do I print an HTML document from a web service?
有关然而,对于我之前的服务器2012,它可以正常工作。
更新2。即使整个打印在一个单独的进程中发生也不起作用,即我的服务启动了一个进行打印的进程,它也不起作用。如果我在控制台模式下运行相同的代码,一切正常。它绝对不是一个线程问题,而是服务器2012中的深层次问题。
现在的问题是:
改变了什么?为什么它停止工作?
答案 0 :(得分: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 \ CLSID {BA7C0D29-81CA-4901-B450-634E20BB8C34}
检查“AppID”注册表项的值。在我们的案例中,这是{AA0B85DA-FDDF-4272-8D1D-FF9B966D75B0}
由于这是Windows中的一个错误,因此无法在代码中修复它。解决方法可能有副作用,但到目前为止我们还没有看到任何副作用。