2011-09-16 31 views
7

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

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.

+2

'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

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