服务程序中启动Windows应用程序问题

mrzhjy 2010-05-17 10:35:38
做了一个服务程序,其中有一个功能是检测一个Windows应用程序(Win32窗口程序)是否正常运行,如果没有运行则将其启动,程序在启动时是最小化到系统托盘中的;
在2000/XP下没有问题,但在Vista/Win7下总是有问题:
1、如果在服务程序中用ShellExecute(Ex)/WinExec/CreateProcess等方法运行后,程序具有System权限,可以正常读写注册表等操作,但是不知道如何才能将程序窗口在当前默认的用户桌面运行,也就是说当前的系统托盘中看不到图标,也无法操作;
2、如果通过CreateProcessAsUser可以让程序运行在当前用户的桌面,但此时程序不具有管理员权限,无法操作注表,不能正常工作;
如何才能在服务中检测并运行此矢口否认序呢?
...全文
490 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
mrzhjy 2010-05-18
  • 打赏
  • 举报
回复
怎么没有人回复呀,Vista/Win7真的很让人郁闷呀,在复务中查找一个运行的程序窗口都不能实现,用共享内存也不能实现服务程序和桌面程序交互..... 大牛们快出招啊
mrzhjy 2010-05-17
  • 打赏
  • 举报
回复
呵呵,我的服务程序是具有System权限的,在2000/XP下运行正常,主要是Vista/Win7下不行,楼上的朋友没有看清的的原贴说明呢。希望楼下继续
@井九 2010-05-17
  • 打赏
  • 举报
回复
服务本身也是有权限设置的,你可以改改设置看看。
如果不行,服务启窗口程序好像需要传Token。
mstlq 2010-05-17
  • 打赏
  • 举报
回复
我以前遇到这个问题时,是参考下面链接http://www.qqgb.com/Program/VC/VCsystem/Program_152455.html
的第四部分解决的(用的是CreateProcess方法启动应用程序)


不过当时我用的环境是xp,不知道这是否也适合楼主的情况……
mrzhjy 2010-05-17
  • 打赏
  • 举报
回复
原贴内容有误,也可能说得不够清楚,修改如下:
做了一个服务程序A,其中有一个功能是检测一个Windows应用程序B(Win32窗口程序)是否正常运行,如果B没有运行则将其启动,程序B在启动时是最小化到系统托盘中的,当用户点击托盘图标时才显示主窗口;
在2000/XP下没有问题,但在Vista/Win7下总是有问题:
1、如果在服务程序A中用ShellExecute(Ex)/WinExec/CreateProcess等方法运行后,程序B具有System权限,可以正常读写注册表等操作,但是不能在系统托盘区看到程序图标,也就是说程序B并没有在当前桌面运行,此时会显示服务交互通知窗口,点击显示消息,进到另一个桌面,不知道如何才能将程序运行在当前默认的用户桌面?
2、如果用CreateProcessAsUser,通过取Explorer进程Token,可以让程序运行在当前用户的桌面,但此时程序B以Explorer继承的权限运行,不具有管理员权限,无法进行注册表等操作,而不能正常工作;
如何才能在Vista/Win7下的服务程序中检测并运行一个带窗口的Win32程序呢?

65,184

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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