2010-11-24 2 views
35

Я знаю, как установить права доступа к папке:Wix: Как установить разрешения для папки и все вложенные папки

<DirectoryRef Id="ProgramFilesFolder"> 
    <Directory Id="PHPFolder" Name="PHP"> 
    <Component Id="PHP_comp" DiskId="1" Guid="*"> 
     <CreateFolder> 
     <Permission User="Everyone" GenericAll="yes" /> 
     </CreateFolder> 

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

ответ

35

Прежде всего, я бы порекомендовал вам вместо этого использовать PermissionEx. Это стандартное расширение WiX, и у него есть одно действительно огромное преимущество перед разрешением - оно не перезаписывается, а изменяет ACL. И по умолчанию он применяет разрешения к папке и всем ее дочерним файлам и папкам, поэтому вам не нужно указывать что-либо дополнительное.

Надеюсь, это поможет.

+0

Можете ли вы привести пример с PermissionEx? Я использую его внутри тега CreateFolder, но получаю сообщение об ошибке «Необходимый атрибут SDDL отсутствует». У меня также есть атрибуты User и GenericAll с ошибкой «атрибут не объявлен». Спасибо – 2012-12-04 13:44:16

+7

Это потому, что вы используете стандартный элемент `PermissionEx`, который поддерживается в MSI 5.0. Он имеет другую подпись и ожидает атрибут SDDL. Вы должны включить `UtilExtension` следующим образом:` xmlns: util = "http: // schemas.microsoft.com/wix/UtilExtension` и ссылаться на него как` ` – 2012-12-04 14:06:03

21

Я решил: различные PermissionEx определены в Wix и Util схеме (Wix PermissionEx и Util Extension PermissionEx)

Я использовал версию Util:

  • добавить ссылку на WixUtilExtension сборки
  • Добавить пространство имен UtilExtension к тегу Wix:
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" 
xmlns:util="http://schemas.microsoft.com/wix/UtilExtension"> 
  • Укажите версию Util PermissionEx:
<CreateFolder Directory="DirectoryToManage"> 
    <util:PermissionEx User="Users" GenericAll="yes" /> 
</CreateFolder> 
14
<DirectoryRef Id="INSTALLFOLDER"> 
     <Component Id="INSTALLFOLDER_Permission" Guid="*"> 
      <CreateFolder> 
       <util:PermissionEx User="Users" GenericAll="yes"/> 
      </CreateFolder> 
     </Component> 
    </DirectoryRef> 

Ответ выше правильно, и вы будете устанавливать права доступа ко всем папкам и файлам в этой папке ,

Но обратите внимание: тег CreateFolder должен быть в компоненте, и этот компонент необходимо добавить в Feature.

Кроме того, вы должны добавить это в командной строке компилятора и линкер:

-ext WixUIExtension -ext WixUtilExtension 
Смежные вопросы