2011-05-30 44 views
6

我正在更新我们的“打印机监控”应用程序。以前,此应用程序在Windows 2000服务器上成功运行。现在我们转向Windows 7服务器。在Windows 7上,我们的“打印监视器”应用程序崩溃。当我调试它,我发现我们SetJob函数抛出了以下异常:Windows打印机假脱机程序setjob功能不适用于Windows 7?

参数不正确。

有没有人知道这件事?

函数调用:

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

后台程序的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 
+0

该API调用在Windows7上未更改。该异常通常意味着您要么有一个无效的JobId,要么JobId没有与该打印机句柄关联。从Windows Vista开始,MS引入了客户端渲染(CSR)以提高打印效率,这可能会导致作业通过假脱机程序多次运行,也可能是其他地方的某些其他错误导致不匹配。 – BBoy 2011-06-30 22:33:18

+1

当您说“Windows 7 Server”时,我们可以假设您的意思是“Windows Server 2008 R2”?我假设基于标签。 – 2012-05-10 18:54:25

+1

您是否在事件日志中获得了提供事件id的条目? – 2012-05-10 19:00:02

回答

相关问题