У меня есть служба Windows, которая должна распечатывать текст HTML.
ОС 7, с .NET 4.5.1 и IE 11.Учетные данные службы Windows
Код:
private static void PrintOnStaThread(string text)
{
using (WebBrowser webBrowser = new WebBrowser())
{
webBrowser.Navigate("about:blank");
webBrowser.Document.OpenNew(false);
while (webBrowser.DocumentText != text && webBrowser.ReadyState != WebBrowserReadyState.Complete)
{
webBrowser.Document.Write(text);
webBrowser.Refresh();
Application.DoEvents();
}
InternetExplorer internetExplorer = (InternetExplorer)webBrowser.ActiveXInstance;
internetExplorer.ExecWB(OLECMDID.OLECMDID_PRINT, OLECMDEXECOPT.OLECMDEXECOPT_DONTPROMPTUSER, Win32.PRINT_WAITFORCOMPLETION);
}
}
Проблема:
Когда служба регистрируется с помощью Local System
счета функцию ExecWB
ничего не делает и поток выходит без каких-либо исключений. Когда служба регистрируется с использованием учетных данных администратора, функция ExecWB
работает отлично, но я не хочу использовать эту учетную запись.
Любые комментарии будут приветствоваться.
Не использовать WinForms в Windows Service. Проблема, скорее всего, вызвана этим. Используйте другой способ печати HTML. Если необходимо, см. [Печать html-документа из службы Windows в C# без диалога печати] (http://stackoverflow.com/questions/416314/print-html-document-from-windows-service-in-c-sharp-without -print-dialog), но он все еще использует элемент управления WebBrowser. См. Также [Печать html-документа из Windows Service без диалогового окна печати] (http://stackoverflow.com/questions/419412/print-html-document-from-windows-service-without-print-dialog). – CodeCaster
Я знаю и использовал первый пример в своем коде. Я не совсем понимаю, что вы подразумеваете под «Не используйте WinForms». Я не думаю, что это так. – toy4fun