gpt4 book ai didi

delphi - 创建 Windows 服务来打开程序 - Delphi

转载 作者:行者123 更新时间:2023-12-03 15:00:33 24 4
gpt4 key购买 nike

我正在使用 Delphi 创建 Windows 服务。我的服务需要做的基本上就是打开一个程序。在我的代码中,我使用 WinExec(aux,SW_SHOWNORMAL);。当我启动并运行该服务时,似乎没有执行任何操作,但是当我在任务管理器中查看时,我的服务应打开的程序位于列表中,并且在用户名列中显示 SYSTEM。

因此程序正在打开,但没有显示在屏幕上。我在 Google 上进行了研究,发现了一些像 CreateProcess 这样的函数,但我不知道如何使用它。我做错了什么?

抱歉我的英语不好。

最佳答案

服务始终在 session 0 中运行。默认情况下,服务启动的进程在服务的 session 中运行,除非服务使用 CreateProcessAsUser() 在不同的 session 中运行该进程。

在 XP 及更早版本中,第一个登录的用户也在 session 0 中运行(后续登录的用户在 session 1+ 中运行)。因此,如果该服务在安装时被标记为交互式,并且运行一个具有 UI 的进程,则在 session 0 中运行的用户可以看到该 UI。

在 Vista 及更高版本中,这不再可能。用户不再在 session 0 中运行,服务也无法再标记为交互式。这称为“ session 0 隔离”。服务现在必须使用 CreateProcessAsUser() 才能在交互式 session 中运行 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

关于delphi - 创建 Windows 服务来打开程序 - Delphi,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11907299/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com