Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.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
Windows 获取%ALLUSERSPROFILE%的NSIS变量_Windows_Installation_Nsis - Fatal编程技术网

Windows 获取%ALLUSERSPROFILE%的NSIS变量

Windows 获取%ALLUSERSPROFILE%的NSIS变量,windows,installation,nsis,Windows,Installation,Nsis,%ALLUSERSPROFILE%是否有NSIS变量 如果没有,您知道如何使用NSIS代码获取此环境变量吗 注意:如果我使用ReadEnvStr$R7 ALLUSERSPROFILE,$R7包含C:/ProgramData,因为安装程序已请求提升权限RequestExecutionLevel admin。这太令人沮丧了 从Vista%ALLUSERSPROFILE%开始是%SystemDrive%\ProgramData。以前在“所有用户”下的部分内容已移动到%Public%,其余内容在%Pro

%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}

从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}

要扩展@Anders reply,还可以使用SHGetSpecialFolderPath并进行简单的单线调用,以接收操作系统上文件夹的路径

将它与CSIDL值一起使用,您只需调用一个函数并弹出返回

Function ".OnInit"
  System::Call 'shell32::SHGetSpecialFolderPath(i $HWNDPARENT, t .r1, i 0x23, i0)i.r0'
  pop $1
  MessageBox MB_OK|MB_ICONINFORMATION "$1"
FunctionEnd

Section ""
  ; blank section (so the script runs)
SectionEnd
这将把C:\ProgramData Vista+或C:\Documents and Settings\All Users\Application Data XP返回到$1中,并显示一个显示路径的消息框

通过切换CSIDL值0x23,您可以返回一组不同系统文件夹的路径

以下是一些常见的CSIDL值,可用于返回路径:

0x0桌面 0x2程序 0x5我的文档 0x6收藏夹 0x7启动 0x8最近的文档 0x9发送到文档 0x10桌面目录 0x11我的电脑 0x14字体目录 0x15 Windows模板 0x20 Internet缓存 0x21 Cookies 0x22历史记录 0x23通用应用程序数据 0x25系统 0x26程序文件 0x27我的照片 0xb开始菜单 0xd我的音乐 0x1a应用程序数据 0x1c本地应用程序数据 0x2b通用程序文件
要扩展@Anders reply,还可以使用SHGetSpecialFolderPath并进行简单的单线调用,以接收操作系统上文件夹的路径

将它与CSIDL值一起使用,您只需调用一个函数并弹出返回

Function ".OnInit"
  System::Call 'shell32::SHGetSpecialFolderPath(i $HWNDPARENT, t .r1, i 0x23, i0)i.r0'
  pop $1
  MessageBox MB_OK|MB_ICONINFORMATION "$1"
FunctionEnd

Section ""
  ; blank section (so the script runs)
SectionEnd
这将把C:\ProgramData Vista+或C:\Documents and Settings\All Users\Application Data XP返回到$1中,并显示一个显示路径的消息框

通过切换CSIDL值0x23,您可以返回一组不同系统文件夹的路径

以下是一些常见的CSIDL值,可用于返回路径:

0x0桌面 0x2程序 0x5我的文档 0x6收藏夹 0x7启动 0x8最近的文档 0x9发送到文档 0x10桌面目录 0x11我的电脑 0x14字体目录 0x15 Windows模板 0x20 Internet缓存 0x21 Cookies 0x22历史记录 0x23通用应用程序数据 0x25系统 0x26程序文件 0x27我的照片 0xb开始菜单 0xd我的音乐 0x1a应用程序数据 0x1c本地应用程序数据 0x2b通用程序文件
您希望得到什么文件夹?这与UAC/elevations无关,因为您询问的是一个由所有用户共享的文件夹…您希望得到什么文件夹?这与UAC/elevations无关,因为您询问的是一个由所有用户共享的文件夹…本机NSIS常量使用SHGetSpecialFolderPath后台。本机NSIS常量在后台使用SHGetSpecialFolderPath。