Почему моя служба Windows не может выполнить внешнее приложение? - PullRequest
3 голосов
/ 08 декабря 2011

Я создал сервис для печати файлов PDF. Когда я вызываю FoxitReader через объект System.Process, отправляя ему консольные команды, сервис ничего не делает. Я читал об изоляции сеанса 0, но мой сервис не вызывает приложение с графическим интерфейсом, он просто выполняет команду в исполняемом файле.

Это мой код:

System.Diagnostics.Process proc = new System.Diagnostics.Process();
            proc.StartInfo.FileName = "FoxitReader.exe";
            proc.StartInfo.Arguments = " /t " + '"' + nombreArchivo + '"' + " " + '"' + nombreImpresora + '"';
            EventLog.WriteEntry("InboundServicioImpresion", "Comando impresion:" + proc.StartInfo.FileName + proc.StartInfo.Arguments);
            proc.StartInfo.RedirectStandardError = true;
            proc.StartInfo.RedirectStandardOutput = true;
            proc.StartInfo.UseShellExecute = false;
            proc.Start();
            proc.WaitForExit();

ПРИМЕЧАНИЕ. FoxitReader.exe входит в состав пакета услуг; он установлен в той же папке, что и служба.

Службы запускаются и записывают в журнал событий, когда код говорит, что он должен это сделать, и он не вылетает и не выдает никакого исключения (каждый метод контролируется try-catch). Кроме того, он способен перемещать файлы из одной папки в другую. Единственное, что не работает - это печатать с помощью Foxit, Adobe Reader или SumatraPDF.

Есть идеи, почему это не работает?

Заранее спасибо, Эстебан.

Ответы [ 2 ]

4 голосов
/ 08 декабря 2011

Вам нужно полное имя файла, а не просто имя файла.Для служб по умолчанию задан путь C: \ Windows \ System32 (или применяется в зависимости от вашей ОС).

Измените эту строку:

proc.StartInfo.FileName = "FoxitReader.exe";

на эту (или просто закодируйте ее, если онавсегда фиксированный путь):

proc.StartInfo.FileName = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "FoxitReader.exe");
2 голосов
/ 08 декабря 2011

Работаете ли вы в своей учетной записи LocalSystem по умолчанию?Возможно, у него нет доступа к принтеру.

Попробуйте изменить службу для запуска и учетную запись, которая может нормально печатать с FoxitReader, и посмотрите, работает ли она.Внесите изменения на вкладке «Вход в систему» ​​при настройке службы с помощью апплета панели управления службами Windows: http://www.powershellinside.com/kb/articles/powershellssh-useraccounts-1.jpg

...