Win7交互式服务编程,不弹出交互式服务检测

在Win7中编写服务程序时,通常会遇到交互式服务检测对话框的问题,导致无法正常与桌面交互。本文介绍了如何通过获取当前用户Token并以用户身份创建子进程,从而解决这个问题,使得服务可以正常运行Windows计算器等程序,不弹出交互式服务检测对话框。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一次写Windows服务程序,XP下一个MessageBox都弹不出来,在Services.msc中允许其与桌面交互后,MessageBox就能正常弹出。但在Win7下总是弹出[Windows交互式服务检测]的对话框,即使选择显示消息,也完全是在另一个环境下显示的,这是在Win7下交互式服务所面临的共同问题。

在百度上查了一下,知道交互式服务检测由Interactive Services Detection服务完成。当有服务要与桌面交互的时候,就会触发Interactive Services Detection服务,接着弹出[Windows交互式服务检测]的对话框。

禁用Interactive Services Detection是无法解决问题的,这样连[Windows交互式服务检测]都不会出现,更何况是与桌面交互的内容呢。

 

后来我想到新建一个子程序,由这个子程来显示我的对话框

服务无法显示出对话框,子程不是一个服务,不存在与桌面交互的限制,我想这样应该没问题了吧。。。

现实是残酷的。。。我就运行Calc.exe,可爱的计算器压根都出不来,出来的还是那个该死的[Windows交互式服务检测]。。。那时我想屎的心都有了。。。

 

困扰我N多天,我突然发觉不对劲。同样作为服务,为什么Interactive Services Detection就能弹出[Windows交互式服务检测]的对话框,我们写的服务就弹不出呢???凭什么丫

于是我把焦点集中在Interactive Services Detection服务上。查看Interactive Services Detection服务主程序UI0Detect.exe的输入表,看到CreateProcessAsUser的时候好像想到了些什么。再次运行我的服务,出现[Windows交互式服务检测]的时候打开ProcExp,看到两个UI0Detect.exe,互为父子进程。父进程是服务,子进程不是。想到CreateProcessAsUser,查看一下,果然,父进程的用户为SYSTEM,子进程的用户为当前我用的帐户。

 

<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值