Исходный код 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устранить эту проблему с помощью новой функции таблицы.
Иначе, что я делаю не так?