Как включить унаследованные разрешения при указании разрешений для файла, установленного установщиком Wix / Windows? - PullRequest
1 голос
/ 13 марта 2019

Исходный код Wix, который я передаю компилятору Wix для создания пакета MSI для моего приложения, содержит следующую директиву PermissionEx, часть файлового компонента, который установщик Windows должен установить дополнительно (к тем, которые должны наследоваться).по умолчанию) permissions:

<PermissionEx Sddl="D:AR(A;;FW;;;BU)" />

Как вы можете догадаться, я намерен установить файл с унаследованными разрешениями («AR»), включенными в его ACL, и поверх этого разрешить членам встроенных пользователейгруппе («BU»), которой разрешено («A») выполнять запись в файл («FW»).

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

В отличие от этого, если впоследствии я удаляю все разрешения из файла и запускаю cacls file /S:D:AR(A;;FW;;;BU), т.е. указываю точно такой же SDDLстрока, она работает как задумано - разрешения от родителя наследуются и образуют часть ACL вместе с явным ненаследованным ACE.

Я использую Wix 3.11.1.2318, версия установщика Windows - 5.0.16299.611, все работают под управлением Windows 10 Enterprise 64-bit.Орка говорит мне, что таблица MsiLockPermissionsEx, встроенная в мой построенный файл MSI, заполнена предполагаемой записью SDDL.Так почему же файл создается без наследования разрешений от содержащей его папки?

Я пытался использовать «AI» вместо «AR», и обе строки вместе, но ни одна из них не имела никакого эффекта.

Это какое-то известное ограничение или изюминка с установщиком Windows?Я знаю, что некоторое время назад люди говорили о том, что старая таблица LockPermissions (та, которая была указана для версий установщика Windows ранее 5) была неадекватной в этом конкретном отношении - унаследованных разрешений, а именно - но они также сказали, что Microsoftустранить эту проблему с помощью новой функции таблицы.

Иначе, что я делаю не так?

Ответы [ 2 ]

3 голосов
/ 13 марта 2019

Взгляните на собственный PermissionEx в расширении Util для WiX.

http://wixtoolset.org/documentation/manual/v3/xsd/util/permissionex.html

2 голосов
/ 14 марта 2019

Учитывая ваши знания в этой области, вы, вероятно, уже пробовали это. Также было бы намного лучше устранить необходимость в разрешении, но для вас два фрагмента - обратите внимание на атрибут Append:


Создание проекта WiX в Visual Studio. Добавьте пространство имен Util к элементу WiX:

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
     xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">

В проекте Visual Studio щелкните правой кнопкой мыши References и добавьте ссылку на "%ProgramFiles(x86)%\WiX Toolset v3.11\bin\WixUtilExtension.dll".


Папка прав доступа :

<Component Feature="ProductFeature" Id="Test.exe" Guid="PUT-GUID-HERE">
   <File Source="C:\Test.exe" />
   <CreateFolder>
     <util:PermissionEx User="Power Users" GenericWrite="yes"  />
   </CreateFolder>
</Component>

Файл разрешения :

<Component>
   <File Source="C:\Test2.exe">
      <util:PermissionEx Append="yes" User="Users" GenericWrite="yes" />
    </File>
</Component>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...