一个windows服务程序,登录身份是本地系统账户,程序中需要用CreateProcess创建一个子进程,当服务属性选择不允许服务与桌面交互时,CreateProcess返回成功,但GetExitCodeProcess获取到子进程的返回码是C0000142。实际子进程并没有创建成功。郁闷的是这种情况并不是每次执行都会出现,有时失败后重复1次就可以正常执行,有时重试很多次也无法成功,有时跑一天都很正常,没有找到规律。
服务类型选了允许服务与桌面交互时还没有发现这种情况,但是win7上执行会有弹出交互式服务检测的提示,不太友好。
网上搜到了stackoverflow上的问题贴,没发现合适的解决方法,因为这个服务启动的子进程不是自己开发的,没法修改子进程的源码。
windows官网上有session,station和desktop的解释也没太搞明白,大约是要用一个登录的用户去执行子进程。有没有遇到过类似情况的朋友给一个解决方案:选择不允许与桌面交互时可以成功创建子进程,选择允许与桌面交互时不弹出交互式服务检测提示,不要用停止Interactive Services Detection服务的方法,太暴力了。
服务类型选了允许服务与桌面交互时还没有发现这种情况,但是win7上执行会有弹出交互式服务检测的提示,不太友好。
网上搜到了stackoverflow上的问题贴,没发现合适的解决方法,因为这个服务启动的子进程不是自己开发的,没法修改子进程的源码。
windows官网上有session,station和desktop的解释也没太搞明白,大约是要用一个登录的用户去执行子进程。有没有遇到过类似情况的朋友给一个解决方案:选择不允许与桌面交互时可以成功创建子进程,选择允许与桌面交互时不弹出交互式服务检测提示,不要用停止Interactive Services Detection服务的方法,太暴力了。
解决方案 »
- 变量需要堆栈帧
- SetFocus 和SendMessage 我该用哪个?(子窗口接收鼠标滚轮事件)
- 我用recv时出现的小问题
- 我们编写应用程序完成以后,如何监视应用程序使用的内存是否完全释放。
- 关于多线程之间共享对象数组(急)
- 求教:关于hook键盘消息的一点儿疑惑。
- COM内部控制
- 有谁知道清华一个学生做的关于VC网站的地址是多少了?
- 如何创建各行颜色不同的表格?
- 想找一些ActiveX control方面的资料,大侠们请推荐!
- WININET.DLL编程中的FTPOpenFile问题,用21端口可以,别的端口就打不开了
- 请教一个问题,对你来说可以相对容易,我却是不清楚,程序代码静态与动态问题
至于楼主说的创建子进程,createProcess(),我也用的不多,仅用过简单的创建一个进程,然后就不管它了,当然是在普通程序里而不是在服务里。
根据网上搜索C0000142,再加上我的理解,估计还是权限问题。子进程需要访问某些资源,但有时候这个资源被锁定或者其它情况导致无法被子进程访问,此时出现问题。
不知道楼主的子进程是做什么用的,是否需要和其它本地程序交互