【问题标题】:Windows printer spooler setjob function not working for Windows-7?Windows 打印机后台处理程序 setjob 功能不适用于 Windows-7?
【发布时间】:2011-09-04 20:09:51
【问题描述】:

我正在更新我们的“打印机监控”应用程序。以前此应用程序在 Windows 2000 服务器上成功运行。现在我们转移到 Windows 7 服务器。在 Windows 7 上,我们的“打印监视器”应用程序崩溃。调试的时候发现我们的SetJob函数抛出如下异常:

参数不正确。

有人知道吗?

函数调用:

SetJob(
    mhPrinter,
    midJob,
    0,
    IntPtr.Zero,
    PrintJobControlCommands.JOB_CONTROL_PAUSE) 'Here exception is thrown

我们使用的 Spooler API:

<DllImport("winspool.drv", EntryPoint:="SetJob", _

SetLastError:=True, CharSet:=CharSet.Ansi, _

ExactSpelling:=False, _

CallingConvention:=CallingConvention.StdCall)> _

Public Function SetJob _

(<InAttribute()> ByVal hPrinter As IntPtr, _

<InAttribute()> ByVal dwJobId As Int32, _

<InAttribute()> ByVal Level As Int32, _

<InAttribute()> ByVal lpJob As IntPtr, _

<InAttribute(), MarshalAs(UnmanagedType.U4)> ByVal dwCommand As PrintJobControlCommands _

) As Boolean

【问题讨论】:

  • 该 API 调用在 Windows7 上没有改变。该异常通常意味着您的 JobId 无效,或者 JobId 未与该打印机句柄关联。从 Windows Vista 开始,MS 引入了客户端渲染 (CSR) 以提高打印效率,这可能会导致作业多次通过假脱机程序运行,可能是您的代码中的其他错误导致不匹配。
  • 当您说“Windows 7 Server”时,我们可以假设您的意思是“Windows Server 2008 R2”吗?我假设基于标签。
  • 您是否在事件日志中获得任何提供事件 ID 的条目?

标签: vb.net .net-4.0 windows-server-2008-r2 spooler


【解决方案1】:

请在此处有一个循环,如何构建函数以及如何调用解析器:

http://www.pinvoke.net/default.aspx/winspool.setjob

它与你实现它有点不同。希望它会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多