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

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

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


person Jay R.    schedule 22.09.2008    source источник


Ответы (6)


Используйте плагин AccessControl, а затем добавьте его в скрипт, где каталог «журналов» находится в установочный каталог.

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

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

person Jay R.    schedule 22.09.2008

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

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

S-1-5-32-545 эквивалентен «Пользователи» согласно Поддержка Microsoft: широко известные идентификаторы безопасности в операционных системах Windows.

person user474708    schedule 13.10.2010
comment
Ваша ссылка не работает - person Ayxan Haqverdili; 21.09.2019

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

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

person Sam Hasler    schedule 24.09.2008
comment
Взгляните на этот ответ, чтобы узнать, как это сделать в log4net: stackoverflow.com/questions/468989/ - person Gavin Miller; 30.03.2011

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

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

person Mirhahil    schedule 03.03.2011

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

person Sören Kuklau    schedule 22.09.2008

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

person JesperE    schedule 22.09.2008
comment
Я хочу, чтобы другие пользователи тоже могли просматривать журналы. Если они находятся в пользовательском каталоге APPDATA, то, если пользователь 1 запускает приложение, только пользователь 1 или администратор могут видеть файл журнала. - person Jay R.; 22.09.2008