我正在使用单声道服务,出于安全原因,它以特权用户身份启动并模拟非特权用户。该服务经常模拟用户运行外部进程,然后切换回来。但是外部进程需要用户特定的环境变量(如“$HOME”),这些变量不会被用户模拟更改。
这是我用来模拟用户的代码:
WindowsIdentity tmpIdentity = new WindowsIdentity(user);
using(WindowsImpersonationContext tmpContext = tmpIdentity.Impersonate()) {
//run process here
}
我还尝试在生成进程之前运行以下代码,但没有影响:
Environment.SetEnvironmentVariable("HOME",Environment.GetFolderPath(Environment.SpecialFolder.Personal),EnvironmentVariableTarget.Machine);
Environment.GetFolderPath(Environment.SpecialFolder.Personal)
在模仿之后/期间不会改变
有没有办法更新环境变量?