加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

创建Windows服务以打开程序 – Delphi

发布时间:2020-12-14 02:27:22 所属栏目:Windows 来源:网络整理
导读:我正在使用Delphi创建 Windows服务.我的服务需要做的基本上是开放一个程序. 在我的代码中我使用WinExec(aux,SW_SHOWNORMAL);.当我启动并运行该服务时,似乎没有任何操作,但是当我查看TaskManager时,我的服务应该打开的程序在列表中,并且在用户名列中显示SYSTE
我正在使用Delphi创建 Windows服务.我的服务需要做的基本上是开放一个程序.
在我的代码中我使用WinExec(aux,SW_SHOWNORMAL);.当我启动并运行该服务时,似乎没有任何操作,但是当我查看TaskManager时,我的服务应该打开的程序在列表中,并且在用户名列中显示SYSTEM.

所以程序正在打开,但它没有显示在屏幕上.
我在谷歌做了一项研究,发现了一些像CreateProcess这样的功能,但我不知道如何使用它.
我究竟做错了什么?

抱歉我的英语不好.

解决方法

服务始终在会话0中运行.默认情况下,服务启动的进程在服务的会话中运行,除非服务使用CreateProcessAsUser()在其他会话中运行该进程.

在XP及更早版本中,第一个登录用户也在会话0中运行(后续用户登录在会话1中运行).因此,如果服务在安装时标记为Interactive,并且它运行具有UI的进程,则在会话0中运行的用户可以看到UI.

在Vista及更高版本中,这已不再可能.用户永远不再在会话0中运行,并且服务不再被标记为交互式.这称为“会话0隔离”.服务现在必须使用CreateProcessAsUser()才能在交互式会话中运行UI进程,以便用户可以看到它.

有关更多详细信息,请参阅MSDN:

Session 0 Isolation

Impact of Session 0 Isolation on Services and Drivers in Windows

Calling CreateProcessAsUser() from service

Launching an interactive process from Windows Service in Windows Vista and later

CreateProcessAsUser function

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读