我有一个C#控制台应用程序,它通过API调用获得一个HTML页,并使用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调用和所有),然后等待消息无限重复。
发布于 2019-05-21 15:31:10
我在获得类似的工作时遇到了一些问题。尽管windows表单应用程序使用的是vb,但这里还是有一些需要注意的地方。在您的代码中,您可以检查documentLoaded和documentPrinted。我假设有一个事件处理程序编码为在PrintTemplateTeardown和DocumentComplete上触发?我还看到你检查是否启用了print命令,如果没有启用,就会无限循环,你可能会想看看这个。最后,ie在导航到你的网页时会显示吗?尝试从该页手动打印时发生的情况可能会为您提供一些进一步的线索。我的应用程序以我的身份运行正常,但在使用服务帐户运行时会使资源管理器崩溃。到目前为止,我已经确定了一个我不知道如何修复或调试的rpc问题。(What do I need to look into to fix this printing issue)
https://stackoverflow.com/questions/56217087
复制相似问题