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
該API調用在Windows7上未更改。該異常通常意味着您要麼有一個無效的JobId,要麼JobId沒有與該打印機句柄關聯。從Windows Vista開始,MS引入了客戶端渲染(CSR)以提高打印效率,這可能會導致作業通過假脫機程序多次運行,也可能是其他地方的某些其他錯誤導致不匹配。 – BBoy 2011-06-30 22:33:18
當您說「Windows 7 Server」時,我們可以假設您的意思是「Windows Server 2008 R2」?我假設基於標籤。 – 2012-05-10 18:54:25
您是否在事件日誌中獲得了提供事件id的條目? – 2012-05-10 19:00:02