|
Печать из-под Network Service не работает, куда копать?
|
|||
---|---|---|---|
#18+
Приложение запущено из-под Network Service. Задача: распечатать tiff-файл на заданный принтер, и ни фига не работает. Для теста использую Русиновича: Код: vbnet 1.
поясняю whoami =nt authority\network service -i -обеспечивает режим "рабочего стола", т.е. окна и все MsgBox выводятся (под этим аккаунтом мне на экран) Вот такой грубо тест код: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
Что делает: 1) пытается исполнить "printto" через ShellExecute c параметрами cur_printer (имя принтера) для файла in_file (ext=.tif) 2) если не получилось (а на Win10 без танцев с бубном вероятность что не получится велика), то делает ImageView_PrintTo (эквивалентно команде rundll32.exe shimgvw.dll,ImageView_PrintTo /pt "%1" "%2" "%3" "%4") Код: vbnet 1. 2.
(API недокументирована, но гарантированно рабочая на всех OS, проверено и вымучено вдоль и поперек) В общем суть в том что эта ImageView_PrintTo точно знает как печатать файл-картинку на заданный принтер вне зависимости от того что там наворочено в verb "printto". под юзером работает под System тоже Результат этого теста под Network Service ("Printto failed") ("ImageView_PrintTo_ok") -dll то параметры съела но печати не происходит Следующий тест -код: Код: vbnet 1. 2. 3.
имена принтеров выводит, ну по крайней мере Network System принтеры видит. С слову об "оригиналах" Windows Fax and Scan Сервис -> Параметры факса Дополнительные параметры -> при получении факса Печать на Ни фига эта ф-ция на Win10 не работает. Там возможно используется то же самое, может свой код вывода на печать, но суть что не работает. И вот в чем подвох, и куда копать? М.б. попытаться что-то еще тестово распечатать из-под какого-то .Net кода (ну в конце концов можно и нарисовать такой код ручками наверно, tiff файл то он стандартный). Или там беда какая общая принципиальная с печатью из под Network Service? Или надо как-то "делегировать" задачу другому аккаунту (вопрос только какому и как грамотно реализовать, понятно что можно MailSlot-ов понавешать, ток вот на что... а если это WinServer с мульти-юзерами, да еще "до входа в систему")? P.S. метод лечения printto на Win10 запустить "OpenWith.exe .tif" (под тем аккаунтом кот. лечить) и выбрать "Просмотр фотографий Windows". тогда она подставит в "printto" упомянутую команду shimgvw.dll,ImageView_PrintTo /pt "%1" "%2" "%3" "%4" (которую я и так вызываю в лоб) На System такая ручная пилюля прокатывает, на .NetworkService пишет нет доступа, к чему доступа нет однако неясно, картинку прикладываю (файла ".tif" естественно нет, это всего лишь хитрость чтоб установить "прога по умолчанию для .tif" для аккаунта под которым запускаем, под System повторюсь прокатывает): ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2017, 11:42 |
|
Печать из-под Network Service не работает, куда копать?
|
|||
---|---|---|---|
#18+
Дмитрий77И вот в чем подвох, и куда копать? М.б. попытаться что-то еще тестово распечатать из-под какого-то .Net кода (ну в конце концов можно и нарисовать такой код ручками наверно, tiff файл то он стандартный). Или там беда какая общая принципиальная с печатью из под Network Service? .Net Netом, а вот такая хрень под NetworkService заработала: Код: vbnet 1. 2. 3. 4.
(эта команда печатает тестовую страницу на "My Printer") Значит все-таки не глобальная Тогда вопрос: качественный код в лоб (без использования printto или конкретного другого приложения) для распечатки указанного Tiff (GDI+/- ?) с учетом многостраничности на указанный "My Printer" сварганить реально? Когда-то давно пытался, но забил. Здесь готов повозиться. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2017, 12:19 |
|
Печать из-под Network Service не работает, куда копать?
|
|||
---|---|---|---|
#18+
Во первых выяснил почему под Network Service не работает вот это, по крайней мере воспроизвел проблему визуально Код: vbnet 1.
Вместо прямой отправки на печать просто открываем картинку в "Программа просмотра изображений" (под Network Service через Русиновича). Делается так: Код: vbnet 1.
Открывается без проблем. А вот дальше нажимаем "печать" в интерфейсе и начинаются траблы уже на этапе предварительного просмотра (вероятно shimgvw.dll под Network Service не имеет к чему то доступа с чем работает). Короче скрин прилагаю: ... |
|||
:
Нравится:
Не нравится:
|
|||
27.07.2017, 09:43 |
|
Печать из-под Network Service не работает, куда копать?
|
|||
---|---|---|---|
#18+
Ну, а во-вторых Тогда вопрос: качественный код в лоб (без использования printto или конкретного другого приложения) для распечатки указанного Tiff (GDI+/- ?) с учетом многостраничности на указанный "My Printer" сварганить реально? В общем GDIPlus и .Net-овский PrintDocument - и все OK работает под Network service. Типа так, ф-цию PrintFile можно вызвать последовательно несколько раз (но не параллельно, т.к. я использую внешние переменные типа счетчика страниц), в моем случае - консольное приложение, кот. может последовательно распечатать файл на несколько принтеров : Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92.
cMultiFrameImage - класс, инкапсулирующий многофреймовый bitmap, загружает документ через m_Bitmap = New Bitmap(FileName), туда можно загружать любую GdiPlus графику, т.е. не только многостраничные TIF но и bmp, jpeg, png, gif и т.п. Класс этот тьфу-тьфу написан давно (изначально были API на VB6, я переделывал в Graphics). Самое муторное счас было решить задачу ReCalculateRectangle - т.е. вписать картинку в область печать по высоте или ширине. Как-то так. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.07.2017, 10:06 |
|
Печать из-под Network Service не работает, куда копать?
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
27.07.2017, 10:53 |
|
Печать из-под Network Service не работает, куда копать?
|
|||
---|---|---|---|
#18+
Antonariy, привет, это ты к чему эту картинку? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.07.2017, 10:59 |
|
Печать из-под Network Service не работает, куда копать?
|
|||
---|---|---|---|
#18+
Дмитрий77Antonariy, привет, это ты к чему эту картинку?привет. почему-то тебя напомнила. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.07.2017, 02:21 |
|
Печать из-под Network Service не работает, куда копать?
|
|||
---|---|---|---|
#18+
Antonariy, не, не похож ... |
|||
:
Нравится:
Не нравится:
|
|||
28.07.2017, 02:31 |
|
Печать из-под Network Service не работает, куда копать?
|
|||
---|---|---|---|
#18+
Дмитрий77Antonariy, привет, это ты к чему эту картинку? Это Сизиф, если что ... |
|||
:
Нравится:
Не нравится:
|
|||
28.07.2017, 08:13 |
|
Печать из-под Network Service не работает, куда копать?
|
|||
---|---|---|---|
#18+
Изопропил, это я понял что сизиф, только мой труд как бы не сизифов, ибо плоды таки приносит. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.07.2017, 09:23 |
|
Печать из-под Network Service не работает, куда копать?
|
|||
---|---|---|---|
#18+
Дмитрий77Изопропил, это я понял что сизиф, только мой труд как бы не сизифов, ибо плоды таки приносит. Так и у Сизифа так сказать, тоже плоды труда есть: камень таки катится. Так и лопатой можно море вырыть. https://www.power-print.net/features ... |
|||
:
Нравится:
Не нравится:
|
|||
28.07.2017, 09:39 |
|
|
start [/forum/topic.php?fid=20&fpage=41&tid=1399780]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
47ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
others: | 22ms |
total: | 160ms |
0 / 0 |