使用NSIS可以访问Windows的公用文件夹“ c:\ Users \ Public”

时间:2019-03-12 09:50:36

标签: nsis

如何使用NSIS脚本获取公用文件夹路径?是否存在类似于$ SMPROGRAMS的常量。 我需要在“ C:\ Users \ Public \ companyname \ appname”下安装软件

我正在寻找类似下面的内容,

SetShellVarContext all
StrCpy $INSTDIR "$PUBLIC\${COMPANYNAME}\${APPNAME}"

$ PUBLIC在此获取依赖于操作系统的公用文件夹。

1 个答案:

答案 0 :(得分:0)

从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