Как вы устанавливаете права доступа к каталогам в NSIS? - PullRequest
34 голосов
/ 22 сентября 2008

Я пытаюсь собрать установщик Windows с помощью Nullsoft Install System, который требует установки администратором. Установщик создает каталог «logs». Поскольку обычные пользователи могут запускать это приложение, этот каталог должен быть доступен для записи обычным пользователям. Как мне указать, что все пользователи должны иметь разрешение на запись в этот каталог на языке сценариев NSIS?

Я признаю, что это звучит как некая плохая идея, но приложение является лишь внутренним приложением, которое используют лишь несколько человек в частной сети. Мне просто нужно сохранить файлы журнала, чтобы я мог понять, почему приложение сломалось, если что-то случилось. Пользователи не могут быть сделаны администратором.

Ответы [ 6 ]

33 голосов
/ 22 сентября 2008

Используйте плагин AccessControl , а затем добавьте его в сценарий, где каталог "logs" находится в каталоге установки.

AccessControl::GrantOnFile "$INSTDIR\logs" "(BU)" "FullAccess"

Это дает полный доступ к папке для всех пользователей.

14 голосов
/ 13 октября 2010

AccessControl::GrantOnFile "<folder>" "(BU)" "FullAccess" не работал для меня на компьютере с Windows Server 2008. Вместо этого я должен был использовать это:

AccessControl::GrantOnFile "<folder>" "(S-1-5-32-545)" "FullAccess"

S-1-5-32-545 эквивалентен «Пользователям» согласно http://support.microsoft.com/default.aspx?scid=kb;EN-US;Q243330

9 голосов
/ 24 сентября 2008

Вместо того, чтобы изменять разрешения для каталогов в Program Files, почему бы не поместить журналы в место, доступное для записи всем пользователям.

См. Раздел 4.9.7.7 SetShellVarContext в документации NSIS. Вы можете использовать его с $ APPDATA, чтобы получить папку данных приложения, доступную для записи всем пользователям.

6 голосов
/ 03 марта 2011

Сейчас это старая проблема, но, как предлагает каталог Sören APPDATA, это хороший способ сделать то, что вы хотите, вот что: Не берите личные APPDATA пользователя, а каталог APPDATA "Все пользователи"! Таким образом, каждый сможет получить доступ к файлу журнала; -)

Кроме того, я где-то читал, что использование (BU) в GrantOnFile не работает с некоторыми системами (Win 7 x64, если я хорошо помню), возможно, вам следует использовать SID "(S-1-5-32-545 ) "вместо этого (это SID всех пользователей, это значение является константой в каждой ОС Windows)

3 голосов
/ 22 сентября 2008

В одну сторону: вызвать оболочку и использовать cacls или xcacls.

2 голосов
/ 22 сентября 2008

Почему бы не создать каталог журналов в пользовательском каталоге% APPDATA%? Вы действительно должны поместить все журналы в каталог установки? Почему?

...