我有一个C#控制台应用程序,它通过API调用获取HTML页面,并使用SHDocVw打印文档。InternetExplorer&ExecWB。当我直接(双击)运行应用程序时,一切都按预期运行。但是,当我从Windows服务运行应用程序时,控制台应用程序会挂起,等待打印机响应。
我以管理员的身份运行该服务,从我从Task Manager收集的信息来看,它也以管理员的身份运行控制台应用程序。我检查了打印机名称是否有效,并且所有内容都通过了检查,因此应用程序似乎可以访问打印机。IE实例加载文档时不会出现问题,因此有内容要发送到打印机。直接运行时,将OLECMDEXECOPT_dontComputer切换为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调用和所有调用),然后等待消息无限重复。