Windows 获取当前用户%APPDATA%路径,而不是管理员
我正在查找当前用户Windows 获取当前用户%APPDATA%路径,而不是管理员,windows,installation,nsis,Windows,Installation,Nsis,我正在查找当前用户%APPDATA%文件夹的路径 注意:我知道变量$APPDATA,但是如果您使用RequestExecutionLevel admin运行安装程序,则$APPDATA将指向管理员漫游文件夹,而不是当前用户的应用程序数据文件夹 我需要找出当前用户%APPDATA%的路径,以便将文件写入他们的漫游目录。有人知道我怎样才能找到答案吗 RequestExecutionLevel admin Section "Main" MessageBox MB_OK "AppData i
%APPDATA%
文件夹的路径
注意:我知道变量$APPDATA
,但是如果您使用RequestExecutionLevel admin
运行安装程序,则$APPDATA
将指向管理员漫游文件夹,而不是当前用户的应用程序数据文件夹
我需要找出当前用户%APPDATA%的路径,以便将文件写入他们的漫游目录。有人知道我怎样才能找到答案吗
RequestExecutionLevel admin
Section "Main"
MessageBox MB_OK "AppData is: $APPDATA" # knowtice that its the path to the admins folder not the current user's
SectionEnd
术语“当前用户”不明确,您的意思是:
- 您从
获得的用户?(WinLogon)WTSQueryUserToken()
- shell的任务栏作为哪个用户运行?(
)GetShellWindow()
- 启动安装过程的用户(父进程)
如果您由于某种原因无法执行延迟的复制/安装,您将面临类似的黑客攻击,这将使您能够访问启动安装程序的用户…好的,谢谢您的建议,但我发现了一个通知,它告诉我所有用户目录的位置。我仍然无法确定哪个用户当前登录,但我可以确定所有非管理员用户,这非常有用
!include "NTProfiles.nsi"
!macro HandleUserProfiles
!define NTProfilePaths::IgnoreLocal
!ifndef __UNINSTALL__
${EnumProfilePaths} HandleUserProfile
!else
${EnumProfilePaths} un.HandleUserProfile
!endif
!macroend
!macro HandleUserProfile prefix
Function ${prefix}HandleUserProfile
Pop $R9
!ifndef __UNINSTALL__
# Copy files to user dir
SetOutPath "$R9\AppData\Roaming\Autodesk\Revit\Addins\2013" # $APPDATA = C:\ProgramData
FILE /r "${INSTALLFILEDIR}\Addins\Revit_2013\myAddin.addin"
!else
Delete "$R9\AppData\Roaming\Autodesk\Revit\Addins\2013\myAddin.addin"
!endif
# Continue Enumeration
Continue:
Push ""
Return
# Stop Enumeration
Stop:
Push "~" # Any value other than an empty string will abort the enumeration
FunctionEnd
!macroend
!insertmacro HandleUserProfile ""
!insertmacro HandleUserProfile "un."
嗯,不,通过UAC提示符获得管理员权限的安装程序仍然使用非提升用户的appdata文件夹运行。对于需要管理员访问权限才能写入当前用户的应用程序数据文件夹的安装程序来说,这是没有意义的。有两种情况:第一种是为所有用户安装,在这种情况下,安装程序不应负责写入应用程序数据文件夹,因为这样应用程序对其他用户的行为就不会相同。而是在第一次运行时从应用程序本身写入数据。第二种情况是,您只为当前用户安装,在这种情况下,您不需要管理员权限。@HansPassant是否运行了我的示例代码?对我来说,它显示了管理员%APPDATA%的路径。如果没有,你能解释一下你是怎么做到的吗?您的用户是管理员还是普通用户user@HarryJohnston虽然没有意义,但Autodesk Revit会同时安装到ProgramData、程序文件、%APPDATA%和%LOCALAPPDATA%。我正在安装Revit加载项,因此我需要安装到ProgramData,程序文件,%APPDATA%。这很公平。我相当肯定Hans说的是正确的,Windows Installer通常会向您提供非提升用户的文件夹,但NSIS的实现方式可能有所不同。一个想法是:许多MSI安装程序包装在一个EXE文件中,在这种情况下,除非EXE有一个明确要求在没有提升的情况下运行的清单,否则它将无法工作。也许这就是你的设想?