提供几个点,仅供参考:
vista及以上:服务在session 0中,与桌面session相隔离,确认创建的ole对象是否只适用于非0的交互session
服务的账户是system还是其他如net service,不同用户权限差别很大。
由于服务程序不方便调试,建议打文件日志,将每个操作的结果或错误值输出以便查错。
vista及以上:服务在session 0中,与桌面session相隔离,确认创建的ole对象是否只适用于非0的交互session
服务的账户是system还是其他如net service,不同用户权限差别很大。
由于服务程序不方便调试,建议打文件日志,将每个操作的结果或错误值输出以便查错。
解决方案 »
- 自定义函数写在哪里
- teechart 7.0问题
- 一个sql语句查询出错难题,不知怎么修改,请各位高手帮忙!!!!!
- 三层中我在DataSetProvider里的BeforeUpdateRecord里写了向更一个表的Insert Into,在客户端新增一条就ApplayUpdates时是好的,新增多条
- 如何将硬盘中的文件进行拷贝,重命名的操作?
- DELPHI专家,这个是不是有点难度啊?帮我化解一下啊.
- 新手提问,急
- delphi 转换成 C/C++ 万分感谢
- 谁能为我提供yamaha ymf719e-s声卡驱动程序?
- 有那位老兄知道《Delphi技巧集》这个软件?
- 安装delphi7 报错 求解答
- dbgrid顏色改變
@truexf
1. 如何确认 Ole 对象“只适用于非0的交互session”?
2. 服务的账号,我是用的默认的,应该就是 System 吧。但是,我修改成本机账号(含有 Admin 权限)。
也没能起作用。说明一下:我已经登录,在桌面上手动操作的服务“Start”。
请指点一下。
谢谢。
TO 楼主:
这个背后涉及的问题挺多的,比如Integrity level、session与session、session与desktop。Exe调用CreateOleObject,会以当前session、当前的desktop作为进程启动信息;所以在service调用时需要考虑,否则在当前desktop无法看到界面,甚至createoleObject失败。
建议到MSDN多了解一下这方面的知识。下面这个链接中的转帖内容也可以看看
http://blog.csdn.net/kaylc/article/details/7938714另外,你代码中的GetLastError,最好放在CreateOleObject下面。可能无效,因为API调用出错,如果没有第一时间GetLastError,可能会因程序在后续处理过程被重置——CreateOleObject内部不确定是否做了防护处理。
我没有继续下去,
如果有人看到这里,可以查一下
1. Session 0 (隔离)
2. CreateProcessAsUser
或许有结题方案。