启动进程作为网络服务
本文关键字:网络服务 进程 启动 | 更新日期: 2023-09-27 18:33:35
我正在尝试从本地系统下运行的服务启动用户网络服务的进程。为此,我使用以下 pinvoke 操作序列:
-
LogonUser()
-
DuplicateTokenEx()
-
LoadUserProfile()
-
CreateEnvironmentBlock()
-
CreateProcessAsUser()
使用上述步骤,我能够启动流程 - 我在事件查看器中看到流程创建事件。但是,我正在创建的进程是一个 C# 应用程序,它生成一个主机.exe子进程,并立即崩溃,这可能是由于主机.exe子进程崩溃(也显示在事件日志中 - 崩溃原因是 DLL 初始化失败(。
我还发现,如果我在我的计算机上授予网络服务管理员权限,我就可以使用上述步骤成功启动该过程。
最后,我还尝试直接从在网络服务用户下运行的服务启动相同的进程,在这种情况下,它成功启动。这让我怀疑我尝试启动新过程的上下文的某些内容不完整,并且我缺少另一个启动环境的操作。
我的方法有什么明显的问题吗?我在某处错过了一步吗?
问题是STARTUP_INFO
结构的lpDesktop
字段设置不正确。如果该值未设置为 string.Empty
,则新进程将尝试使用它无权访问的父进程的桌面。