我有一个我在提交时运行的延迟自定义操作,并设置不来模拟。在我的操作中调用System.Security.Principal.WindowsIdentity.GetCurrent()
确认当前标识是针对NT AUTHORITY \ SYSTEM。
但是当我使用Environment.GetEnvironmentVariable()
为我的操作获取一些输入时,它会返回我正常登录用户的值而不是SYSTEM的值:
var profilePath = Environment.GetEnvironmentVariable("USERPROFILE");
// profilePath == "c:\users\[myname]", expecting "C:\Windows\system32\config\systemprofile"
为什么会这样,我怎样才能获得SYSTEM的环境?谢谢!
答案 0 :(得分:1)
一些可能有帮助的想法。
Windows Installer使用模拟很多,但它不会像LoadUserProfile那样加载用户的配置文件(就像交互式登录一样),因为该进程可能会在每次自定义操作调用时加载新的用户配置文件,具体取决于是否被冒充。作为系统帐户运行只是模仿,并不意味着加载了系统帐户的配置文件。
据我所知,您通过拥有系统帐户的访问令牌来获取此文件夹,然后使用Win32 API GetUserProfileDirectory()或托管等效项。
如果你描述了你想要完成的最终目标,这可能会有所帮助。目前尚不清楚这是XY Problem or not
答案 1 :(得分:0)
使用促进功能的overload:
public static string GetEnvironmentVariable(
string variable,
EnvironmentVariableTarget target
)