С помощью NSIS возможно получить доступ к общедоступной папке Windows "c: \ Users \ Public" - PullRequest
0 голосов
/ 12 марта 2019

Как получить путь к общей папке, используя скрипт NSIS?Есть ли константа, похожая на $ SMPROGRAMS.Мне нужно установить мое программное обеспечение в "C: \ Users \ Public \ companyname \ appname"

Я ищу что-то вроде ниже,

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

, где $ PUBLIC поднимаетОС-зависимая общая папка.

1 Ответ

0 голосов
/ 12 марта 2019

Начиная с 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
...