Как распечатать pdf-файл в Windows service C#?
Печать pdf-файла через службу windows работает как приложение. но со службой это не удается.
Служба запускается с учетной записью, в которой установлен принтер, но печать по-прежнему не выполняется.
ProcessStartInfo infoPrintPdf = new ProcessStartInfo(); //pathPdf = @"D:\ITC.pdf"; infoPrintPdf.FileName = pathPdf; // The printer name is hardcoded here, but normally I get this from a combobox with all printers string printerName = System.Configuration.ConfigurationManager.AppSettings["PrinterName"].ToString(); //string printerName = "HP LaserJet Professional P1606dn"; string driverName = System.Configuration.ConfigurationManager.AppSettings["DriverName"].ToString(); string portName = System.Configuration.ConfigurationManager.AppSettings["portName"].ToString(); string passwordStr = "july2016."; //System.Security.SecureString password = new System.Security.SecureString(); //foreach (char c in passwordStr) // password.AppendChar(c); //infoPrintPdf.UserName = "veena.cjohn@chn.nestgroup.net"; //infoPrintPdf.Password = password; infoPrintPdf.FileName = System.Configuration.ConfigurationManager.AppSettings["AcrobatExePath"].ToString(); infoPrintPdf.Arguments = string.Format("/t {0} \"{1}\" \"{2}\" \"{3}\"", pathPdf, printerName, driverName, portName); infoPrintPdf.CreateNoWindow = true; infoPrintPdf.UseShellExecute = false; infoPrintPdf.WindowStyle = ProcessWindowStyle.Hidden; Process printPdf = new Process(); printPdf.StartInfo = infoPrintPdf; printPdf.Start(); // This time depends on the printer, but has to be long enough to // let the printer start printing System.Threading.Thread.Sleep(10000); if (!printPdf.CloseMainWindow()) // CloseMainWindow never seems to succeed printPdf.Kill(); printPdf.WaitForExit(); // Kill AcroRd32.exe printPdf.Close(); // Close the process and release resources
Что я уже пробовал:
ProcessStartInfo infoPrintPdf = new ProcessStartInfo(); //pathPdf = @"D:\ITC.pdf"; infoPrintPdf.FileName = pathPdf; // The printer name is hardcoded here, but normally I get this from a combobox with all printers string printerName = System.Configuration.ConfigurationManager.AppSettings["PrinterName"].ToString(); //string printerName = "HP LaserJet Professional P1606dn"; string driverName = System.Configuration.ConfigurationManager.AppSettings["DriverName"].ToString(); string portName = System.Configuration.ConfigurationManager.AppSettings["portName"].ToString(); string passwordStr = "july2016."; //System.Security.SecureString password = new System.Security.SecureString(); //foreach (char c in passwordStr) // password.AppendChar(c); //infoPrintPdf.UserName = "veena.cjohn@chn.nestgroup.net"; //infoPrintPdf.Password = password; infoPrintPdf.FileName = System.Configuration.ConfigurationManager.AppSettings["AcrobatExePath"].ToString(); infoPrintPdf.Arguments = string.Format("/t {0} \"{1}\" \"{2}\" \"{3}\"", pathPdf, printerName, driverName, portName); infoPrintPdf.CreateNoWindow = true; infoPrintPdf.UseShellExecute = false; infoPrintPdf.WindowStyle = ProcessWindowStyle.Hidden; Process printPdf = new Process(); printPdf.StartInfo = infoPrintPdf; printPdf.Start(); // This time depends on the printer, but has to be long enough to // let the printer start printing System.Threading.Thread.Sleep(10000); if (!printPdf.CloseMainWindow()) // CloseMainWindow never seems to succeed printPdf.Kill(); printPdf.WaitForExit(); // Kill AcroRd32.exe printPdf.Close(); // Close the process and release resources
F-ES Sitecore
Службы не могут взаимодействовать с рабочим столом, поэтому, если ваш процесс показывает какие-либо диалоговые окна и т. д., Он не будет работать, вам нужен метод печати, который не требует доступа к рабочему столу.
Ema112
служба работает с учетными данными учетной записи Пользователя, в которой установлен сетевой принтер. Тем не менее печать не вызывается во время работы в качестве службы windows. Этот код прекрасно работает как приложение windows или вызывая функцию с in initialize компонентом службы windows.