【问题标题】:Windows service: PrintTicket provider failed to bind to printer. Win32 error: -2147467231Windows 服务:PrintTicket 提供程序无法绑定到打印机。 Win32 错误:-2147467231
【发布时间】:2014-06-17 22:08:36
【问题描述】:

从作为 Windows 服务(32 位)托管的服务打印会引发异常。

例外: PrintTicket 提供程序无法绑定到打印机。 Win32错误:-2147467231

当作为控制台应用程序(32 位)托管时,该方法工作正常,但是当作为 Windows 服务托管时,它会引发异常。

private void Print(PrintJob printJob, string templateXaml)
    {
        Thread t = new Thread(() =>
        {
            try
            {
                dynamic labelDataObject = CreateDynamicObject(printJob.LabelData);
                PrintQueue queue = GetPrintQueue(printJob.PrintQueue);
                PrintTicket ticket = queue.DefaultPrintTicket;
                ticket.PageOrientation = PageOrientation.Portrait;
                FixedPage page = RenderPage(new Size(ticket.PageMediaSize.Width.Value, ticket.PageMediaSize.Height.Value), labelDataObject, templateXaml);

                XpsDocumentWriter xpsWriter = PrintQueue.CreateXpsDocumentWriter(queue);
                xpsWriter.Write(page, ticket);
            }
            catch
            {
                throw;
                //TODO: Logging and notification
            }
        });
        t.IsBackground = false;
        t.SetApartmentState(ApartmentState.STA);
        t.Priority = ThreadPriority.AboveNormal;
        t.Start();
        t.Join();
    }

我尝试在管理员、当前登录用户和本地系统帐户下运行该服务。到目前为止没有任何效果。请帮忙:/

【问题讨论】:

  • 您是否尝试过搜索? Is it a 64-bit machine?
  • 错误代码 0x800004021 (-2147467231) 转换为“不支持尝试的操作。”。

标签: c# winapi printing


【解决方案1】:

我们遇到了同样的问题:使用 .net 框架从 32 位 Windows 服务向打印机发送 XPS 文件失败并显示错误消息。

根据MS支持,有2种解决方案:

  1. 使用 64 位 Windows 服务
  2. 应用知识库文章 2954953 中描述的注册表修改

希望这能解决您的问题!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-20
    • 1970-01-01
    • 1970-01-01
    • 2017-01-26
    相关资源
    最近更新 更多