Ghostscript.Net не работает в Windows Server 2012 R2

Я использую Ghostscript.NET в своем проекте для печати файлов PDF через сеть. Локально работает нормально, используя Windows 10, версия 64-разрядная и драйвер Ghostscript для 32-разрядной версии (Ghostscript 9.22 для 32-разрядной версии Windows), загруженной с веб-сайта https://www.ghostscript.com/download/gsdnld.html. Мотивация для установки 32-битной версии является исключением,

Ghostscript.NET.GhostscriptLibraryNotInstalledException: эта управляемая библиотека работает под управлением 32-разрядного процесса и требует установки собственной библиотеки 32-разрядного Ghostscript на этом компьютере! Чтобы загрузить надлежащую нативную библиотеку Ghostscript, посетите страницу http://www.ghostscript.com/download/gsdnld.html

, что происходит в журнале моего приложения при использовании 64-разрядного драйвера Ghostscript.

Целевой операционной системой, в которой я опубликовал свое приложение, является Windows Server 2012 R2. Используя тот же драйвер Ghostscript (Ghostscript 9.22 для Windows 32-Bit), команда печати зацикливается бесконечно, без ответа на мое приложение.

Для этой цели я отключил брандмауэр и антивирус, чтобы исключить возможность их появления из-за петель.

Мое приложение считывает файл pdf с диска и отправляет его на сетевой принтер с помощью Ghostscript. Для моделирования процесса я подключаюсь к клиентской машине удаленно, используя TeamViewer. Итак, я вызываю веб-службу REST с этого компьютера, которая сохраняет файл на диск и использует Ghostscript для печати документа на сетевом принтере.

try
                {
                    var task = Task.Run(() =>
                    {
                        using (GhostscriptProcessor processor = new GhostscriptProcessor(GhostscriptVersionInfo.GetLastInstalledVersion(), true))
                        {
                            List<string> switches = new List<string>();
                            switches.Add("-empty");
                            switches.Add("-dPrinted");
                            switches.Add("-dBATCH");
                            switches.Add("-dNOPAUSE");
                            switches.Add("-dNOSAFER");
                            switches.Add("-dPDFFitPage");
                            switches.Add("-dNumCopies=" + numCopias);
                            switches.Add("-sDEVICE=mswinpr2");
                            switches.Add("-sOutputFile=%printer%" + "\\\\" + printerIP + "\\" + printerNAME);
                            switches.Add("-f");
                            switches.Add(inputFile);

                            processor.StartProcessing(switches.ToArray(), null);
                        }
                    });

                    if (!task.Wait(TimeSpan.FromSeconds(Int32.Parse(ConfigurationManager.AppSettings["MAX_PRINTER_DELAY"]))))
                    {
                        Log.Info(String.Format("A impressão do arquivo ({0}) ({1}) foi encerrada porque ultrapassou MAX_PRINTER_DELAY = {2}!", inputFile, printerNAME, ConfigurationManager.AppSettings["MAX_PRINTER_DELAY"]));
                    }

                }
                catch (GhostscriptLibraryNotInstalledException e)
                {
                    Log.Info("O GhostScript não está instalado.");
                    Log.Error(e);
                }
                catch (GhostscriptException e)
                {
                    Log.Info("O GhostScript apresentou erro.");
                    Log.Error(e);
                }
                catch (Exception exception)
                {
                    Log.Error(exception);
                }

Я использую Ghostscript.NET версии 1.2.1.0.

Кто-нибудь может мне помочь?

1 ответ

Архитектура безопасности Microsoft Windows, по-видимому, не позволяет Asp Net API получать доступ к COM-устройствам в качестве принтера напрямую, без использования олицетворения. Используя сторонние библиотеки и локальный принтер, подключенный к компьютеру с более высоким уровнем интранет-пользователя в качестве пользователя IIS, система распечатала файл. Лучший ответ (реализация исходного кода, на мой взгляд, понятная и многократно используемая без особых "усилий по восстановлению" в момент моей необходимости) была получена при разработке программы Windows Service Program (установленной как пользователь-администратор, имеющей доступ к COM-устройствам), которая следит за и отправляет содержимое на принтер, используя другую программу, как Adobe Reader. Целевым принтером для моего реального сценария был IP-принтер, а не локальный принтер.

Другие вопросы по тегам