Process.Startinfo для печати PDF, не работающего в Windows Server 2003, из ASP.NET - PullRequest
3 голосов
/ 20 января 2012

У меня есть код ниже в ASP.NET C #, и он отлично работает в локальной системе + производственная машина, когда я тестировал в режиме отладки.но это не работает при загрузке в IIS.

ProcessStartInfo startInfo = new ProcessStartInfo();
                startInfo.FileName = Server.MapPath(filePath);
                startInfo.Verb = "print";
                startInfo.Arguments = "Printer Name";
                Process proc = new Process();
                proc.StartInfo = startInfo;
                proc.Start();

                proc.WaitForExit(5000);
                if (proc.HasExited == false)
                {
                    proc.Kill();
                }

То, что я пробовал.

  1. Панель управления> Службы администратора> Службы> Служба администратора IIS> Вкладка «Вход»>проверьте, чтобы взаимодействовать с рабочим столом.Сброс IIS Admin и IIS.
  2. Свойства принтера> Безопасность> Grand ASPNET, СЕТЬ СЕРВИС, ВСЕ для полного доступа.
  3. Попытался установить другой принтер в качестве принтера по умолчанию.Переустановите / добавьте принтер.

Я пробовал все вышеописанное, но безуспешно.наконец, я попытался ниже в моей machine.config.

  1. WINNT> Microsoft.NET> Framework> v2.52something> Config> machine.config

Я заменил

processModel autoConfig = "true"

с этим

processModel userName = "SYSTEM" пароль = "AutoGenerate"

и я получаю это сообщение

«Прежде чем вы сможете выполнять задачи, связанные с печатью, вам необходимо установить принтер»

Я использую Acrobat 7 и яМожно распечатать тестовую страницу с самого принтера и из программного обеспечения acrobat.

Ответы [ 2 ]

0 голосов
/ 23 декабря 2013

Возможно, проблема в том, что IIS работает под другим пользователем, у которого меньше прав, чем у обычного пользователя.См. System.Diagnostics.Process.Start не работает с IIS

. Я исправил это на своем сервере, изменив идентификатор ProcessModel на пользователя, у которого есть разрешения.Возможно, это обходной путь и плохая практика, но это сработало.{Пул приложений} -> Расширенные настройки -> Идентичность -> Пользовательская учетная запись (также переключите Загрузить профиль пользователя в значение true)

0 голосов
/ 20 января 2012

вы можете использовать Verb, если на вашей машине установлен acrobat. и передайте имя принтера в качестве аргумента

var fileName = @"c:\pdf\file.pdf";
            var startInfo = new ProcessStartInfo(fileName);
            string verbToUse = "PrintTo";
            startInfo.Verb = verbToUse;
            startInfo.Arguments = "PrinterName";
            Process p = Process.Start(startInfo);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...