Я создаю установщик пакета WiX с управляемым приложением начальной загрузки. Недавно я добавил новый MsiPackage
, который устанавливается для каждой машины, но устанавливается только в том случае, если пользователь соглашается с помощью флажка. Пользователь может позже изменить установку из «Программы и компоненты», чтобы установить этот пакет. Это единственный пакет для каждой машины в комплекте. Остальные на пользователя. Разрешение установки без повышенных привилегий имеет для нас решающее значение, поэтому этот пакет для каждой машины является необязательным. Запрашивать повышенные привилегии во время модификации — это нормально.
Первоначально я настроил новый пакет так:
<MsiPackage Id="optional_package"
Cache="yes" Compressed="yes" Visible="no"
DisplayInternalUI="no"
SourceFile="..\Resources\OptionalPackage.msi" />
Проблема с этой конфигурацией заключалась в том, что если пакет не был установлен при первой установке пакета, он не будет кэшироваться (Cache="yes"
кэшируется только при установке пакета). Если затем пользователь попытается изменить установку, чтобы установить этот пакет, эта операция завершится ошибкой, так как Burn не сможет найти источник OptionalPackage.msi. Я смог обойти эту проблему, запросив, чтобы пакет всегда кэшировался:
<MsiPackage Id="optional_package"
Cache="always" Compressed="yes" Visible="no"
DisplayInternalUI="no"
SourceFile="..\Resources\OptionalPackage.msi" />
Это решило первую проблему, но породило новую проблему. Поскольку OptionalPackage.msi устанавливается на компьютер, программа записи пытается кэшировать его в C:\ProgramData\Package Cache
(кэш для каждого компьютера), а не в %LocalAppData%\Package Cache
(кэш для пользователя). С этим есть две проблемы:
C:\ProgramData\Package Cache
— это расположение для каждой машины, для которого требуются повышенные привилегии. Поскольку мы всегда кэшируем этот новый пакет, пользователю всегда требуются повышенные привилегии для установки.- Во время установки не появляется диалоговое окно UAC с запросом повышенных привилегий. Вместо этого установщик завершается ошибкой, потому что ему отказано в доступе к
C:\ProgramData\Package Cache
. Запуск от имени администратора является обходным путем.
Я подозреваю, что № 2 — это ошибка записи, поскольку она должна запрашивать разрешение на доступ к кешу для каждой машины. Мой вопрос: могу ли я кэшировать в произвольном месте? Можно ли принудительно записать в кэш пакеты для каждой машины в папку для каждого пользователя? Я не вижу никаких вариантов конфигурации для этого.
Я попытался предоставить здесь некоторый контекст на случай, если есть лучший способ сделать это. Моя общая цель - позволить пользователю устанавливать пакеты с помощью модификации, которые были пропущены при первой установке. Если есть лучший способ сделать это, сообщите мне.