Вопрос

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

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

Это было полезно?

Решение

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

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

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

Другие советы

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top