关于在windows服务程序中调用与用户桌面相关的shell函数的问题
首先,windows服务相关的资料非常少,网上流传的都是msdn上一些极为简单的服务编程的代码。
然后,由于现在都使用windows 7了,通过一些网上的资料,知道win7中服务使用的桌面session0,而用户使用的桌面是session1,session2,...虽然我对这个设定理解不是很深,但也大概知道在服务中很多与用户桌面相关的操作会有限制。之前看了一个把服务的权限令牌复制给用户权限令牌,然后用这个权限令牌可以成功的从服务中打开一个UI窗口,并显示在用户桌面上。
现在我遇到的问题的是,很多操作需要用到shell函数,但服务中使用这些函数时就会出错,如SHGetFolderLocation(0,CSIDL_DESKTOP,0,0,&pidl);用getlasterror获得的错误码为2,即无法找到文件。我试过了很多办法,网上最多的可能是SetProcessWindowStation,SetThreadDesktop,SwitchDesktop,但是我试过了,全部都行不通。错误码依然是2.
我想这类问题可能有2种方法解决。
1,有某种方法,把服务的桌面切换到用户的界面,所有的shell函数问题均能引刃而解。不是到有没有这种方法呢?
2,用其他方法代替shell方法,如SHGetFolderLocation是否可以用其他方法获取到pidl的值呢。
希望服务方面比较懂的大神们给点指导,总的项目是一个服务程序,现在编出来的功能经常有这种问题,不得不又另找方法,太悲剧了。