Печать с консоли, запущенной службой Windows [duplicate]

Компилятор хочет, чтобы вы это записывали:

private static List<String> list = new ArrayList<String>();

, потому что в противном случае вы могли бы добавить любой тип, который вам нравится, в list, делая создание как new ArrayList<String>() бессмысленным. Java generics - это только функция времени компиляции, поэтому объект, созданный с помощью new ArrayList<String>(), с радостью примет Integer или JFrame элементы, если они назначены ссылке «raw type» List - сам объект ничего не знает о какие типы он должен содержать, только компилятор делает.

4
задан AlBaraa Sh 1 January 2014 в 18:12
поделиться

4 ответа

Я думаю, вы можете не понимать некоторые фундаментальные понятия здесь. Когда вы используете PrintDocument.Print(), вы печатаете на сервере. При развертывании приложения в IIS эта печать будет происходить на сервере, на котором размещается ваше приложение. Причина, по которой вы считали, что ваш код работает в IIS Express, заключается в том, что вы размещаете свое приложение на том же компьютере, что и клиентский браузер, который его тестировал. Также вы запускали приложение под своей учетной записью, в которой был настроен принтер.

Вы не можете напрямую печатать на клиентском компьютере из веб-приложения. Это будет большой проблемой безопасности. Лучшее, что вы можете сделать, это предоставить некоторый HTML-документ, используя печать media CSS type . Затем, если пользователь решает, он может распечатать его в своем браузере.

Если, с другой стороны, вы хотите печатать на каком-то принтере, который подключен к вашему веб-серверу, вам необходимо настроить пул приложений в IIS для работы под идентификатором, в котором настроен принтер в его профиле.

5
ответ дан Darin Dimitrov 21 August 2018 в 15:12
поделиться
  • 1
    Конечно, я пытаюсь распечатать принтер, настроенный на сервере, а не на моем локальном клиентском принтере. Я попытался сделать так, как вы сказали, чтобы настроить пул приложений, но он не удался. так, как я могу это сделать? – AlBaraa Sh 1 January 2014 в 18:03
  • 2
    Да, в этом случае вы должны настроить пул приложений в IIS для запуска под учетной записью с настройкой принтера. И что вы включили профиль пользователя нагрузки в свойствах этого пула приложений. – Darin Dimitrov 1 January 2014 в 18:04
  • 3
    Я создал пул приложений для локальной учетной записи администратора, а профиль пользователя загрузки включен (= true), но он не работает. – AlBaraa Sh 1 January 2014 в 18:07
  • 4
    У учетной записи локального администратора настроен принтер? – Darin Dimitrov 1 January 2014 в 18:15
  • 5
    Конечно, ничего не появится :-) Он не может появиться. Где вы ожидали, что он появится? Интерфейс IIS не связан с IIS. Это должно работать с обычным принтером. – Darin Dimitrov 1 January 2014 в 18:28

Я думаю, что оригинальный плакат получил много хлопот за их вопрос. Если вы хотите сгенерировать .PDF, используя GhostScript, например, вы устанавливаете драйвер принтера и создаете для него принтер. Вы можете подавить диалог Saveas () на многих языках, предоставив один заблаговременно. Это было возможно в более ранних версиях IIS (которые, возможно, были менее безопасными), но сложнее сделать в IIS 8.

Я думаю, эта проблема вызвана IIS, препятствующей доступу к локальной очереди принтера. Это вызвано тем, что во время выполнения не присутствовало в группе NT AUTHORITY \ INTERACTIVE или из-за того, что IIS поместит пользователя (кто-нибудь из пула приложений) в две группы: IIS APPPOOL \ и BUILTIN \ IIS_IUSRS.

Вы можете проверить все это, посмотрев разрешения потоков с помощью инструмента, такого как Process Explorer процесса Sys.

0
ответ дан Don 21 August 2018 в 15:12
поделиться

Надеюсь, я правильно понимаю ваш вопрос, но я просто смутился с этим. Наша настройка на моей работе - это Windows Server 2008 R2 с IIS 7.

У нас есть сервер печати, также установленный в том же поле (не уверен, имеет ли это значение, поскольку это не моя область эксперта).

В принципе, просмотр установленных принтеров с помощью PrinterSettings.InstalledPrinters я смог увидеть все имена принтеров, установленные на сервере.

Я прикладываю отладчик к процессу приложения для отладки, и я могу просто использовать отладчик, чтобы увидеть это, иначе вам придется запустить цикл для печати через них. Если вы запустите это локально, вы увидите только принтеры, установленные на вашем компьютере. Если это сетевые принтеры, то будет показан полный путь. Поэтому определите путь / имя, на котором сервер будет распознавать принтер, а затем задайте это имя принтера явно, используя свойство

PrinterSettings.PrinterName класса PrintDocument. Это сработало для меня. Кроме того, для моего идентификатора пула приложений установлено значение NetworkService.

0
ответ дан eaglei22 21 August 2018 в 15:12
поделиться

Я столкнулся с такой же проблемой, и нашел следующее решение, и это сработало для меня.

1 - Go to printer and setting of system  
2 - Select Printer  
3 - Go to Printer Properties  
4 - Security  
5 - Click on Add "IIS AppPool\DefaultAppPool" as object name and click on check name (Default Pool will be your Pool Name)  
6 - Give permission Manage This Printer and Manage Document permission.  
7 - Restart IIS
0
ответ дан Paul Karam 21 August 2018 в 15:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: