2010-06-08 5 views
2

Во время моего NSIS установки скрипта для приложения WinForms, я использую следующую CACLS команды, чтобы дать группе пользователей полных прав на подпапки:CACLS спутанность

Exec 'CACLS "$INSTDIR\SubFolder" /E /T /C /G "Users":F' 

Так действуют в CACLS команды выполнился это что-то вроде:

CACLS "c:\Program Files\MyApp\SubFolder" /E /T /C /G "Users":F 

Когда я смотрю на то разрешения папок в проводнике Windows (щелкните правой кнопкой мыши на папке и выберите Свойства, перейдите на вкладку Безопасность), правильные разрешения есть, но они неизменяемое.

Кроме того, нажатие кнопки «Дополнительно» для «Расширенных настроек безопасности» показывает, что SubFolder наследует права группы «Пользователи» от «родительского объекта», но что такое родительский объект, поскольку это не папка выше.

Почему разрешения, добавленные CACLS uneditable, и почему они унаследованы от несуществующего родительского объекта? Я думаю, что я, возможно, неправильно определил параметры CACLS.

Я нахожусь в Windows XP.

ответ

3

Я думаю, что я понял: изменение CACLS для использования/P 'replace' вместо/G «грант», казалось, работал лучше:

CACLS "c:\Program Files\MyApp\SubFolder" /E /T /C /P "Users":F 

Параметры, которые были созданы, затем были доступны для редактирования на вкладке «Безопасность» проводника Windows.

2

NSIS имеет plugin установить разрешения, вы, вероятно, следует использовать, что (я не могу вспомнить, если XP Home даже имеет cacls)

унаследованное разрешение на «пользователей» должен прийти откуда-то ясно, либо root из диска или родителя вашей родительской папки (расширенный диалог безопасности должен иметь унаследованный из столбца в списке)

+0

Я посмотрел на все родительские папки, и разрешения, похоже, не пришли оттуда. Спасибо за предложение плагина. – codeulike

+0

+1 для подключаемого модуля AccessControl. Он отлично работал для меня, и я бы рекомендовал его, потому что он использует Windows API, а не в зависимости от наличия такой утилиты, как cacls на целевой машине. –