如何使用NSIS脚本获取公用文件夹路径?是否有类似于$ SMPROGRAMS的常量。我需要在“C:\ Users \ Public \ companyname \ appname”下安装我的软件
我正在寻找类似下面的东西,
SetShellVarContext all
StrCpy $INSTDIR "$PUBLIC\${COMPANYNAME}\${APPNAME}"
$ PUBLIC选择操作系统相关的公用文件夹。
从Vista %ALLUSERSPROFILE%
开始是%SystemDrive%\ProgramData
。曾经在All Users
下的一些东西被转移到%Public%
,其余的都在%ProgramData%
。
%Public%
文件夹包含共享文档,图片,音乐和视频的文件夹。您可以通过切换到“所有上下文”来访问NSIS中的这些内容:
SetShellVarContext All
DetailPrint $Documents
DetailPrint $Pictures
DetailPrint $Music
DetailPrint $Videos
NSIS不提供对%Public%
文件夹的直接访问,它不是您应该安装应用程序的位置!
如果您发明了一种新的文件夹类型,您应该只使用%Public%
路径,这种文件夹类型可以被多个用户公开和共享:
!include LogicLib.nsh
Section
!define /IfNDef FOLDERID_Public {DFDF76A2-C82A-4D63-906A-5644AC457385}
System::Call 'SHELL32::SHGetKnownFolderPath(g"${FOLDERID_Public}",i0x1000,p0,*p.r1)i.r0'
${If} $0 = 0
System::Call '*$1(&w${NSIS_MAX_STRLEN}.r0)'
System::Call 'OLE32::CoTaskMemFree(pr1)'
DetailPrint "FOLDERID_Public=$0"
${Else}
DetailPrint "FOLDERID_Public does not exist on < Vista"
${EndIf}
SectionEnd