我正在开发一个跨平台库,用于从用户的主目录加载配置文件。其思想是自动提供配置参数,而无需编辑代码。
此库可在桌面应用程序或守护程序/服务中使用。在(我假设)大多数Unix环境中,我可以使用getpwuid()
来获取用户的主目录。在Windows中,我可以使用SHGetKnownFolderPath,但它的文档上说它只能用于桌面应用程序。在Windows上,有没有办法为运行服务的用户提供此路径?
发布于 2017-03-09 16:42:33
对于控制台应用程序,最简单的方法是检索USERPROFILE
环境变量或连接HOMEDRIVE
和HOMEPATH
环境变量的值。
使用标准库https://msdn.microsoft.com/en-us/library/tehxacec.aspx中的getenv()
函数
示例程序:
#include <stdlib.h>
#include <stdio.h>
int main(int argc, char** argv) {
printf("USERPROFILE = %s\n", getenv("USERPROFILE"));
printf("HOMEDRIVE = %s\n", getenv("HOMEDRIVE"));
printf("HOMEPATH = %s\n", getenv("HOMEPATH"));
return 0;
}
输出:
USERPROFILE = C:\Users\myuser
HOMEDRIVE = C:
HOMEPATH = \Users\myuser
发布于 2017-03-09 13:13:19
所以你想让用户主目录处于服务状态吗?-如果你想让它处于服务状态,你必须使用GetUserToken()
来获取用户令牌,然后为CreateprocessAsUser()
复制它们-否则我认为使用SHGetSpecialPath()
,SHGetTempPath()
更好。
发布于 2017-03-09 15:39:27
您可以使用ExpandEnvironmentStrings(...)
解析%HOMEPATH%
https://stackoverflow.com/questions/42696260
复制相似问题