是否有%ALLUSERSPROFILE%的nsis变量?
如果不知道如何使用nsis代码获取此环境变量?
注意:如果我使用ReadEnvStr $R7 "ALLUSERSPROFILE"$R7包含C:/ProgramData,因为安装程序已请求提升权限(RequestExecutionLevel admin)。太令人沮丧了!

最佳答案

从vista%allusersprofile%开始是%systemdrive%\programdata。以前在“所有用户”下的部分内容已移动到%public%,其余内容位于%programdata%。
有几种方法可以获取此目录,但它们都应该给出相同的答案:

ReadEnvStr $0 "ALLUSERSPROFILE"
DetailPrint %ALLUSERSPROFILE%=$0


System::Call 'userenv::GetAllUsersProfileDirectory(t.r0,*i${NSIS_MAX_STRLEN})i.r1'
DetailPrint GetAllUsersProfileDirectory=$0


; In Vista+ %ALLUSERSPROFIL% and CSIDL_COMMON_APPDATA is the same directory:
SetShellVarContext all
DetailPrint All:Appdata=$AppData


!define FOLDERID_ProgramData {62AB5D82-FDC1-4DC3-A9DD-070D1D495D97}
System::Call 'shell32::SHGetKnownFolderIDList(g"${FOLDERID_ProgramData}", i0x1000, i0, *i.r1)i.r0'
${If} $0 == 0
    System::Call 'shell32::SHGetPathFromIDList(ir1,t.r0)'
    System::Call 'ole32::CoTaskMemFree(ir1)'
    DetailPrint SHGetKnownFolderIDList=$0
${EndIf}

关于windows - 为%ALLUSERSPROFILE%获取NSIS变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22470967/

10-11 04:21