【问题标题】:Web browser print from service running on windows 2012从 Windows 2012 上运行的服务进行 Web 浏览器打印
【发布时间】: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 中的问题。

现在的问题是:

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

【问题讨论】:

标签: c# printing windows-services windows-server-2012


【解决方案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。

解决方法如下:

  1. 打开 Regedit 并转到 HKEY_CLASSES_ROOT\CLSID{BA7C0D29-81CA-4901-B450-634E20BB8C34}

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

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

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

【讨论】:

    猜你喜欢
    • 2020-05-03
    • 1970-01-01
    • 2011-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多