Как распечатать файл с использованием задачи по расписанию - PullRequest
1 голос
/ 18 марта 2020

Моя консольная программа работает при двойном щелчке приложения, загружает ZIP-файлы из почты и отправляет PDF-файлы на принтер. Однако проблема заключается в том, что когда я использую задачу, запланированную для запуска этого приложения, она читает почту, а затем загружает ZIP-файлы, но не отправляет PDF-файлы на принтер. Я не понимаю, что это за проблема. Как я могу справиться с этим?

static void Main(string[] args)
        {


            ExchangeService exchange = new ExchangeService(ExchangeVersion.Exchange2013_SP1);
            exchange.Credentials = new WebCredentials("mail", "password);
            exchange.Url = new Uri("https://outlook.office365.com/EWS/Exchange.asmx");

                if (exchange != null)
                {

                        SearchFilter sf = new SearchFilter.SearchFilterCollection(LogicalOperator.And, new SearchFilter.IsEqualTo(EmailMessageSchema.IsRead, false));
                        FindItemsResults<Item> result = exchange.FindItems(WellKnownFolderName.Inbox, sf, new ItemView(20));

                        foreach (Item item in result)
                        {

                                EmailMessage message = EmailMessage.Bind(exchange, item.Id);

                                message.IsRead = true;
                                message.Update(ConflictResolutionMode.AutoResolve);

                                List<Attachment> zipList = message.Attachments.AsEnumerable().Where(x => x.Name.Contains(".zip")).ToList();

                                foreach (Attachment Attachment in zipList)
                                {

                                        if (Attachment is FileAttachment)
                                        {
                                            FileAttachment f = Attachment as FileAttachment;

                                            f.Load("C:\\pdfFiles\\" + f.Name);



                                            string zipPath = @"C:\pdfFiles\" + f.Name;
                                            string extractPath = @"C:\pdfFiles\" + Path.GetRandomFileName();

                                            ZipFile.ExtractToDirectory(zipPath, extractPath);

                                            string[] filePaths = Directory.GetFiles(extractPath, "*.pdf",
                                                         SearchOption.TopDirectoryOnly);

                                            foreach (string path in filePaths)
                                            {

                                                    SendToPrinter(path);

                                            }


                                        }



                                }


                        }


                }

        }


      static void SendToPrinter(string path)
            {
        var printerName = "EPSON L310 Series";

             ProcessStartInfo info = new ProcessStartInfo();
                        info.Verb = "PrintTo";
                        info.FileName = filePath;
                        info.CreateNoWindow = true;
                        info.Arguments = "\"" + printerName + "\"";
                        info.WindowStyle = ProcessWindowStyle.Hidden;

                        Process p = new Process();
                        p.StartInfo = info;
                        p.Start();

                        System.Threading.Thread.Sleep(3000);
     }

Кстати, код, который работает снизу, но мне нужно использовать выше

static void SendToPrinter(string path)
        {
      PdfDocument pdf = new PdfDocument();

       pdf.LoadFromFile(path);

       pdf.Print();
       pdf.Dispose();
   }

1 Ответ

0 голосов
/ 18 марта 2020

Моя консольная программа работает при двойном щелчке по приложению

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

Edit Task > General > Security Options > When running the task use the following account > Select *your* account

Если ваша задача интерактивная (имеет GUI) Галочка Run only when user is logged on

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...