Функция setjob диспетчера очереди печати Windows не работает для Windows-7?

Я обновляю наше приложение «Мониторинг принтера». Ранее это приложение успешно работало на сервере 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

person Ashutosh    schedule 30.05.2011    source источник
comment
Этот вызов API не изменился в Windows7. Это исключение обычно означает, что у вас либо неверный JobId, либо JobId не связан с этим дескриптором принтера. Начиная с Windows Vista, MS представила рендеринг на стороне клиента (CSR) для повышения эффективности печати, это может выглядеть так, как если бы задания запускались через диспетчер очереди несколько раз, возможно, где-то в вашем коде есть какая-то другая ошибка, вызывающая несоответствие.   -  person BBoy    schedule 01.07.2011
comment
Когда вы говорите о Windows 7 Server, можем ли мы предположить, что вы имеете в виду Windows Server 2008 R2? Я предполагаю, основываясь на теге.   -  person Tory Netherton    schedule 10.05.2012
comment
Есть ли в журнале событий записи с идентификаторами событий?   -  person Tory Netherton    schedule 10.05.2012


Ответы (1)


Пожалуйста, запишите здесь, как должна быть построена функция и как вызываются парметры:

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

Это немного отличается от того, что вы реализовали. Надеюсь, это поможет.

person etalon11    schedule 30.12.2015