Консольное приложение печатается при запуске напрямую, а не при запуске службой - PullRequest
1 голос
/ 20 мая 2019

У меня есть консольное приложение C #, которое получает HTML-страницу через вызов API и печатает документ, используя SHDocVw.InternetExplorer & ExecWB.Когда я запускаю приложение напрямую (двойной щелчок), все работает как положено.Тем не менее, когда я запускаю приложение из службы Windows, консольное приложение зависает в ожидании ответа принтера.

Я запускаю службу как администратор, и из того, что я получаю из диспетчера задач, поэтомутакже работает консольное приложение в качестве администратора.Я включил проверки на правильность имени принтера, и все проходит, поэтому кажется, что приложение имеет доступ к принтеру.Экземпляр IE загружает документ без проблем, поэтому есть содержимое для отправки на принтер.Переключение OLECMDEXECOPT_DONTPROMPTUSER на OLECMDEXECOPT_PROMPTUSER дает ожидаемый результат при непосредственном запуске, но ничего при запуске через службу.

В службе:

        public void RunProgram(string exePath)
        {
            Process p = new Process();
            p.StartInfo = new ProcessStartInfo(exePath);
            p.Start();
            p.WaitForExit();
        }

В функции печати:

ie.Navigate(htmlFilename, ref missing, ref missing, ref missing, ref missing);
    while (!documentLoaded && ie.QueryStatusWB(OLECMDID.OLECMDID_PRINT) != OLECMDF.OLECMDF_ENABLED)
        Thread.Sleep(100);

ie.ExecWB(OLECMDID.OLECMDID_PRINT, OLECMDEXECOPT.OLECMDEXECOPT_DONTPROMPTUSER, ref missing, ref missing);
    while (!documentPrinted)
    {
        PrintToErrorFile("waiting for printing to complete...");
        Thread.Sleep(100);
    }

При непосредственном запуске функция печати выдает примерно 6 строк "ожидания ...", как и ожидалось.При запуске из службы программа запускается ожидаемым образом (вызовы API и все), а затем ожидающее сообщение повторяется до бесконечности.

1 Ответ

1 голос
/ 21 мая 2019

У меня были проблемы с получением чего-то похожего на работу.Хотя приложение Windows Form использует vb, вот несколько вещей, на которые стоит обратить внимание.В вашем коде у вас есть проверка для documentLoaded и documentPrinted.Я предполагаю, что есть обработчик события, закодированный для запуска на PrintTemplateTeardown и DocumentComplete?Я также вижу, что ваша проверка на то, что команда печати включена, просто зацикливается до бесконечности, если это не так.Возможно, вы захотите посмотреть на это.И, наконец, отображается ли при переходе на вашу веб-страницу?То, что происходит, когда вы пытаетесь вручную распечатать эту страницу, может дать вам дополнительные подсказки.Мое приложение работает нормально, как я, но вылетает в обозревателе при запуске с учетной записью службы.Я дошел до определения проблемы с RPC, которую я не знаю, как исправить или отладить.( Что мне нужно изучить, чтобы решить эту проблему печати )

...