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

问题描述 投票:0回答:1

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

我正在寻找类似下面的东西,

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

$ PUBLIC选择操作系统相关的公用文件夹。

nsis
1个回答
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
© www.soinside.com 2019 - 2024. All rights reserved.