Невозможно перезаписать файлы в ProgramData\myApp, установленной MSI

Я собираюсь создать пакет MSI. Во время установки (запускаемой, например, двойным щелчком мыши по MSI) некоторые файлы, содержащиеся в MSI, помещаются глубже в папку c:\ProgramData (соответственно CommonAppDataFolder), например, c:\ProgramData\myCompany\myApplication. Позже, когда установленное приложение запускается пользователем, приложению может понадобиться изменить этот файл. Проблема заключается в том, что ни запущенное приложение, ни пользователь, например, с помощью проводника Windows, не имеют права изменять любые файлы в каталоге c: \ ProgramData \ myCompany \ myApplication, созданные во время установки. Файлы не имеют атрибута только для чтения.

Теперь для меня странная вещь: если я устанавливаю MSI через msiexec /q /i, у меня есть права на запись в эти файлы.

Мой MSI создан с помощью WiX, моя ОС - Win 7, пользователь является членом группы администраторов.

Может кто-нибудь сказать мне, почему это так, и как я могу получить права на запись в эти файлы без использования /q /i?

Спасибо Ян

РЕДАКТИРОВАТЬ 2014-03-24: Проклятый. Я пропустил указание атрибута InstallPrivileges для моего элемента, я просто не знал об этом. Установка его в "Limited" не отображает приглашение UAC при установке в ProgramData! И теперь пользователю / моему приложению разрешено перезаписывать файлы в папке назначения:)

2 ответа

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

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

Контроль доступа к Windows чрезвычайно сложен. В каждой версии Windows есть что-то новое и измененное для работы, и похоже, что доступ к записи по умолчанию в ProgramData теперь включает в себя какой-то особый ACL / DACL. Если это действительно проблема, вы можете применить новые разрешения там и открыть для обычных пользователей писать. Обратите внимание, что я не совсем понимаю, какие новые версии Windows применяются по умолчанию. Инструмент, который я обычно использую для установки прав доступа, это subinacl.exe. Настоящая горстка инструмента с командной строкой, которая может напугать самых опытных системных администраторов. Некоторые примеры командной строки здесь. Вы также можете использовать таблицу LockPermissions в MSI, но каким-то образом есть некоторые проблемы с тем, как эти разрешения применяются к объекту файловой системы. Subinacl.exe является более сложным и более способным.

Подробнее о правах доступа к файлам и папкам:

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

Другие вопросы по тегам