Delphi Windows服务作为调度程序,用于在多个用户(服务器或Saas)下运行作业

Delphi Windows Service as Scheduler for run Jobs under multiple User (Server or Saas)

提问人:Giansi87 提问时间:11/17/2023 最后编辑:Remy LebeauGiansi87 更新时间:11/17/2023 访问量:53

问:

我在 Delphi 中编写了一个服务,它是一个简单的作业调度器,例如运行查询或运行 UI 软件或检查冻结等。

一切都在一台 PC 上运行,但我需要在服务器上安装该服务并管理所有登录的用户。 有些作业可以为所有用户运行,但有些作业不能为某些用户运行,而为其他用户运行。

我已经尝试过在这里找到的其他东西,但是当我尝试获取服务的当前用户时,我得到了.我读到对于以管理员身份安装的服务,这是正确的,但是我怎样才能获得登录用户并确保为正确的用户运行作业?GetUserName()SYSTEM

Windows 身份验证 Delphi 服务器 服务

评论

0赞 AmigoJack 11/17/2023
登录用户和登录用户之间存在根本区别。
0赞 Freddie Bell 11/17/2023
这是一个软件设计问题。

答:

1赞 Remy Lebeau 11/17/2023 #1

服务和每个登录用户在单独的终端会话中运行。 获取调用它的会话的用户名。这就是您在服务会话中被调用时看到的原因。GetUserName() SYSTEM

该服务可以使用 WTS API 枚举活动用户会话 (WTSEnumerateSessions()) 并从中获取信息 (WTSQuerySessionInformation()),例如其用户名。

若要在特定用户会话中运行外部进程,该服务可以使用 WTSQueryUserToken() 获取会话的用户令牌,然后使用 CreateProcessAsUser() 以该用户身份运行该进程。