2

我需要了解 CreateProcessAsUser 中 lpEnvironment 的使用。

我的解决方案中有这两行代码,它们由作为本地系统运行的 Windows 服务调用。

CreateProcessAsUser(hTokenCpy, null, applicationName, ref saProcess, ref saThread, false, CREATE_UNICODE_ENVIRONMENT, hEnv, null, ref si, out procInfo)

在调用这个之后调用

CreateEnvironmentBlock(out hEnv, hTokenCpy, false) || hEnv == IntPtr.Zero)

但是,如果对 CreateProcessAsUser 的调用失败。

通过传递 hEnv/IpEnvironment = 0 进行另一次尝试

CreateProcessAsUser(hTokenCpy, null, applicationName, ref saProcess, ref saThread, false, 0, IntPtr.Zero, null, ref si, out procInfo

但是,当以特定用户名创建进程时,创建的进程无法与桌面交互。即使登录用户和运行进程的用户相同。

这是因为进程是在 Windows 服务的内存块而不是登录的用户下创建的吗?

4

0 回答 0