Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Winapi 在安装程序中使用时,SHGetFolderPath返回管理员用户帐户的路径_Winapi_Installation_Special Folders - Fatal编程技术网

Winapi 在安装程序中使用时,SHGetFolderPath返回管理员用户帐户的路径

Winapi 在安装程序中使用时,SHGetFolderPath返回管理员用户帐户的路径,winapi,installation,special-folders,Winapi,Installation,Special Folders,我正在使用SHGetFolderPath CSIDL_APPDATA获取当前用户帐户下应用程序数据文件夹的路径。它工作正常,但如果从安装程序调用它,Windows会将其更改为管理员文件夹!如何从安装程序中获取当前用户的数据文件夹?有一个hToken参数用于此确切情况。如果hToken为空,则函数将使用与调用线程关联的访问令牌。否则,可以将其设置为另一个用户帐户的访问令牌 如果安装程序以管理员身份运行,则安装程序必须: 在调用SHGetFolderPath()之前模拟所需的用户帐户 获取所需用户帐

我正在使用SHGetFolderPath CSIDL_APPDATA获取当前用户帐户下应用程序数据文件夹的路径。它工作正常,但如果从安装程序调用它,Windows会将其更改为管理员文件夹!如何从安装程序中获取当前用户的数据文件夹?

有一个
hToken
参数用于此确切情况。如果
hToken
为空,则函数将使用与调用线程关联的访问令牌。否则,可以将其设置为另一个用户帐户的访问令牌

如果安装程序以管理员身份运行,则安装程序必须:

  • 在调用
    SHGetFolderPath()
    之前模拟所需的用户帐户

  • 获取所需用户帐户的访问令牌,并将其传递给
    hToken


  • 我们对你的安装程序一无所知。所以,很难知道为什么会发生这种情况。您可能想问问自己,为什么要在安装时写入当前用户的配置文件。如果管理员为用户安装软件怎么办?您应该在用户第一次运行应用程序时写入每个用户的数据,而不是在安装时。否则,该应用程序只能为安装它的用户正常工作,这是错误的。好的,谢谢,但我如何获得“当前用户”的令牌。显然,在这种情况下,NULL是admin,-1是“默认用户”,但没有使用其他特殊值。传递
    NULL
    是使用admin帐户,因为admin正在运行安装程序,而不是当前登录用户(假设admin和登录用户不相同)。您可以尝试使用获取安装程序正在运行的会话ID,然后使用获取登录到该会话的用户的访问令牌。