【问题标题】:Printing from windows service从 Windows 服务打印
【发布时间】:2018-03-24 22:37:15
【问题描述】:

我从 Windows 服务在 Microsoft XPS Document Writer 上打印。打印完成良好(没有任何错误)。如果我再次在上面打印(甚至不是从服务中),它就不会打印。在打印队列上,我可以看到我的第一个打印作业(系统)状态为错误,其他作业阻止购买它。如何正确从服务打印? 我使用 CreateDC、StartDoc 等。

编辑:

void Print(const std::wstring& path)
{
    ...
    HDC hdcMXDW = CreateDC(L"WINSPOOL", printerName.c_str(), NULL, NULL);
    if (!hdcMXDW)
    {
        return;
    }

    DOCINFO docInfo = {
        sizeof(DOCINFO),
        L"emf_to_xps",
        xpsName.c_str(),
        NULL,
        0
    };

    if (StartDoc(hdcMXDW, &docInfo) > 0)
    {
        if (StartPage(hdcMXDW) > 0)
        {
            ...
            EndPage(hdcMXDW);
        }
        EndDoc(hdcMXDW);
    }
    DeleteDC(hdcMXDW);
}

所有打印 Api 函数都返回良好的结果。

【问题讨论】:

  • 你需要分享你已经实现的代码。
  • Microsoft 强烈反对从服务打印,并且不会接受有关它的支持电话。打印机驱动程序是具有许多可能的故障模式的代码块。因此,打印 API 只能报告功能失败,而不能报告原因。打印机驱动程序负责将故障本身通知用户。这不能在服务中工作,这样的通知永远不可见。不要这样做。
  • 但是打印 Api 总是返回好的结果。

标签: c++ service printing


【解决方案1】:

我在打印后使用带有参数命令 JOB_CONTROL_DELETE 的 SetJob 修复了这个问题。

【讨论】:

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