Delphi Windows服务作为多用户(服务器或SaaS)下运行作业的工具

kxeu7u2r  于 12个月前  发布在  Windows
关注(0)|答案(1)|浏览(145)

我用 Delphi 编写了一个服务,它是一个简单的作业调度程序,例如运行查询或运行UI软件或检查冻结等。
一切都在一台PC上工作,但我需要在服务器上安装该服务,并管理所有登录的用户。有些作业可以为所有用户运行,但有些作业不能为某些用户运行,而为其他用户运行。
我已经尝试了GetUserName()和其他东西,我发现在这里,但当我试图获得当前用户的服务,我得到SYSTEM。我读到的服务安装为管理员,这是正确的,但我如何才能获得登录的用户,并确保运行正确的用户的作业?

r1zhe5dt

r1zhe5dt1#

服务和每个登录的用户在单独的终端会话中运行。GetUserName()获取它被调用的会话的用户名。这就是为什么在服务会话中调用时会看到SYSTEM
该服务可以使用WTS API枚举活动用户会话(WTSEnumerateSessions())并从它们获取信息(WTSQuerySessionInformation()),例如它们的用户名。
要在特定用户会话中运行外部进程,服务可以使用WTSQueryUserToken()获取会话的用户令牌,然后使用CreateProcessAsUser()以该用户身份运行该进程。

相关问题