我需要了解 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 服务的内存块而不是登录的用户下创建的吗?