繁体   English   中英

在模拟和加载服务中的用户配置文件后是否会影响环境变量?

[英]Are environment variables affected after impersonating and loading a user profile in a service?

我有一个在LocalSystem帐户下运行的Windows服务,我正在尝试访问一些特定于用户的环境变量。 当我调用ExpandEnvironmentStrings(“%AppData%”)时,我得到“C:\\ windows \\ system32 \\ config \\ systemprofile \\ AppData \\ Roaming”。

我认为假冒和加载用户配置文件应该解决这个问题,所以我打电话给:

  • LogonUser的()
  • LoadUserProfile()
  • CreateEnvironmentBlock()
  • ImpersonateLoggedOnUser()

而且,ExpandEnvironmentStrings(“%AppData%”)返回系统文件夹而不是“C:\\ Users \\ Username \\ AppData \\ Roaming”之类的东西。

然后,我搜索了一些更多的东西,并遇到了SHGetFolderPath(CSIDL_LOCAL_APPDATA),它的作用就像一个模仿后模仿的魅力。

我的问题不是我应该做的(即SHGetFolderPath),而是更多关于环境变量如何在服务中起作用的问题。 我在想我的问题是:

  1. 我的LoadUserProfile()代码仍然缺少某些东西,即使一切都返回成功。 我无知的一方想要说服我,理论上,加载用户配置文件应该使ExpandEnvironmentStrings()返回加载的用户的值。

  2. 基于一些读数,似乎服务中的环境变量在系统启动时只读取一次( http://support.microsoft.com/kb/887693 ),因此我的服务只知道系统环境变量。

我倾向于2.但我只需要有人来证实这一点,所以我不会假设有些可能是错误的。

环境变量的文档表明#2是正确的。 引用,重点补充:

每个进程都有一个包含一组环境变量及其值的环境块。

MSDN指向ExpandEnvironmentStringForUser()以解决您的原始问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM