Подтвердить что ты не робот

Как установить права доступа к каталогам в NSIS?

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

Ответ 3

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

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

Ответ 4

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

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

Ответ 5

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

Ответ 6

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