У меня есть консольное приложение 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 и все), а затем ожидающее сообщение повторяется до бесконечности.