Folder ProgramData to najlepsze miejsce do przechowywania plików zapisywalnych aplikacji udostępnianych przez wszystkich użytkowników. Ale kiedy instalator Nsis jest uruchamiany z uprawnieniami administratora (które są wymagane do zapisu w Program Files), foldery i pliki utworzone w folderze ProgramData są przeznaczone tylko dla wszystkich użytkowników z wyjątkiem administratora. Jak to zmienić i mieć pliki do zapisu dla wszystkich użytkowników w folderze ProgramData?Instalator Nullsoft, jak utworzyć podfolder ProgramData, zapisywalny
7
A
Odpowiedz
7
Nie wiem, czy to zachowanie jest funkcją lub błędem, ale znalazłem obejście tego problemu. Wymagana jest wtyczka AccessControl (pobierz i skopiuj folder wtyczek Nsis). Wewnątrz „zainstalować” fragment skryptu NSIS umieścić coś takiego:
; This is important to have $APPDATA variable
; point to ProgramData folder
; instead of current user's Roaming folder
SetShellVarContext all
; This sets us permissions
AccessControl::GrantOnFile "$APPDATA\Folder" "(S-1-5-32-545)" "FullAccess"
AccessControl::GrantOnFile "$APPDATA\Folder\*" "(S-1-5-32-545)" "FullAccess"
S-1-5-32-545 jest równoważna all users, więc ten kod będzie udzielać pełnego dostępu do określonego folderu i wszystkich plików wewnątrz dla wszystkich użytkowników.
1
lub ustawić za pomocą wiersza poleceń (Win7 only): ExecWait 'icacls "$ AppData \ Folder"/grant Użytkownicy: (OI) (CI) m
+0
Windows Server 2003 i wyżej w rzeczywistości :) – nawfal
'accesscontrol :: GrantOnFile„$ AppData \ Folder \ * "" (S-1-5-32-545) "Wiersz" FullAccess "' jest niepotrzebny, ponieważ wszystkie foldery i pliki wewnątrz 'Folder' będą miały pełny dostęp z samym pierwszym wierszem. – nawfal