windows服务程序调用printer打印程序 无法启动打印任务,何解?

IT_SW_FW 2011-05-04 06:02:24
我用windows应用程序调用printer打印程序可以正常打印,但用windows服务程序调用printer却无法启动打印任务无法打印,头痛了一个星期还是无解,各位高人帮帮忙!谢谢。。。。
...全文
739 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
aiouw 2012-07-16
  • 打赏
  • 举报
回复
5楼方法的可以
oyljerry 2011-05-05
  • 打赏
  • 举报
回复
服务用CreateProcessAsUser模拟当前用户方式启动打印.不要用service权限去启动
wish_cn 2011-05-05
  • 打赏
  • 举报
回复
1、确保Print Spooler服务已启动;
2、在你的服务属性选项卡里,把"Allw service to interact with desktop"勾上。
IT_SW_FW 2011-05-05
  • 打赏
  • 举报
回复
无法启动打印任务是因为m_dc.StartDoc(&di)调用不起作用,一是StartDoc僵死出不来,二是StartDoc通过了,但打印任务没起来。
IT_SW_FW 2011-05-05
  • 打赏
  • 举报
回复
服务程序及应用程序调用打印程序都使用以下代码:
string sCommandline = "d:\\imodia\\bin\\printer.exe";
string sWorkDir = sCommandline.substr(0, sCommandline.rfind("\\"));
char pCommandLine[128] = {0};
strcpy(pCommandLine, sCommandline.c_str());

PROCESS_INFORMATION pProcInfo;
STARTUPINFO startUpInfo = {sizeof(STARTUPINFO),NULL,"", NULL,0,0,0,0,0,0,0,STARTF_USESHOWWINDOW,0,0,NULL,0,0,0};
startUpInfo.wShowWindow = SW_SHOW;
startUpInfo.lpDesktop = NULL;

CreateProcess(NULL,pCommandLine, NULL,NULL,TRUE,NORMAL_PRIORITY_CLASS,NULL,sWorkDir.c_str(),&startUpInfo,&pProcInfo);

启动打印任务的代码:
AfxGetApp()->CreatePrinterDC(m_dc);
DOCINFO di;
ZeroMemory(&di,sizeof(DOCINFO));
di.cbSize = sizeof(DOCINFO);
di.lpszDocName = "printer";
m_iTotalLine = 0;
if(m_dc.StartDoc(&di))
{
m_dc.StartPage();
return TRUE;
}

初以为是因为服务程序调用printer程序没有显示出窗口,后把printer窗口显示出来还是无法启动打印任务。一直想不明白是哪出问题了,不知从何下手。
IT_SW_FW 2011-05-05
  • 打赏
  • 举报
回复
5楼兄弟的方法没试,不知道可不可行...不过还是要谢谢大家帮助的。
IT_SW_FW 2011-05-05
  • 打赏
  • 举报
回复
我是和同学讨论后才解决的,方法和6楼oyljerry方法一样,oyljerry早点说就好了,至少昨晚我可以睡的安稳点。我查了下,当printer在system用户下无法启动打印,我让printer在administrator用启下可以打印。
xiaopoy 2011-05-04
  • 打赏
  • 举报
回复
服务程序是不能有窗口的。监视下要使用的API,然后动态LoadLibraryA->GetProcAddress这样的调用。也许可以解决问题。
海盗医生 2011-05-04
  • 打赏
  • 举报
回复
windows应用程序 是控制台类型还是窗口类型?
如果为窗口类型,那么跟服务是有区别的

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧