Winapi 在安装程序中使用时,SHGetFolderPath返回管理员用户帐户的路径
我正在使用SHGetFolderPath CSIDL_APPDATA获取当前用户帐户下应用程序数据文件夹的路径。它工作正常,但如果从安装程序调用它,Windows会将其更改为管理员文件夹!如何从安装程序中获取当前用户的数据文件夹?有一个Winapi 在安装程序中使用时,SHGetFolderPath返回管理员用户帐户的路径,winapi,installation,special-folders,Winapi,Installation,Special Folders,我正在使用SHGetFolderPath CSIDL_APPDATA获取当前用户帐户下应用程序数据文件夹的路径。它工作正常,但如果从安装程序调用它,Windows会将其更改为管理员文件夹!如何从安装程序中获取当前用户的数据文件夹?有一个hToken参数用于此确切情况。如果hToken为空,则函数将使用与调用线程关联的访问令牌。否则,可以将其设置为另一个用户帐户的访问令牌 如果安装程序以管理员身份运行,则安装程序必须: 在调用SHGetFolderPath()之前模拟所需的用户帐户 获取所需用户帐
hToken
参数用于此确切情况。如果hToken
为空,则函数将使用与调用线程关联的访问令牌。否则,可以将其设置为另一个用户帐户的访问令牌
如果安装程序以管理员身份运行,则安装程序必须:
SHGetFolderPath()
之前模拟所需的用户帐户hToken
我们对你的安装程序一无所知。所以,很难知道为什么会发生这种情况。您可能想问问自己,为什么要在安装时写入当前用户的配置文件。如果管理员为用户安装软件怎么办?您应该在用户第一次运行应用程序时写入每个用户的数据,而不是在安装时。否则,该应用程序只能为安装它的用户正常工作,这是错误的。好的,谢谢,但我如何获得“当前用户”的令牌。显然,在这种情况下,NULL是admin,-1是“默认用户”,但没有使用其他特殊值。传递
NULL
是使用admin帐户,因为admin正在运行安装程序,而不是当前登录用户(假设admin和登录用户不相同)。您可以尝试使用获取安装程序正在运行的会话ID,然后使用获取登录到该会话的用户的访问令牌。