Arhn - архитектура программирования

Установщик WiX: измените установку, чтобы включить пакет, пропущенный при первоначальной установке.

Я создаю установщик пакета 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 (кэш для пользователя). С этим есть две проблемы:

  1. C:\ProgramData\Package Cache — это расположение для каждой машины, для которого требуются повышенные привилегии. Поскольку мы всегда кэшируем этот новый пакет, пользователю всегда требуются повышенные привилегии для установки.
  2. Во время установки не появляется диалоговое окно UAC с запросом повышенных привилегий. Вместо этого установщик завершается ошибкой, потому что ему отказано в доступе к C:\ProgramData\Package Cache. Запуск от имени администратора является обходным путем.

Я подозреваю, что № 2 — это ошибка записи, поскольку она должна запрашивать разрешение на доступ к кешу для каждой машины. Мой вопрос: могу ли я кэшировать в произвольном месте? Можно ли принудительно записать в кэш пакеты для каждой машины в папку для каждого пользователя? Я не вижу никаких вариантов конфигурации для этого.

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


Ответы:


1

Я решил эту проблему, поэтому решил опубликовать ответ здесь, чтобы другие могли его найти. В итоге я решил проблему с кэшированием, загрузив пакет опций по запросу, а не кэшируя его. Просто установите Compressed="no" и установите DownloadUrl.

<MsiPackage Id="optional_package"
            Cache="yes" Compressed="no" Visible="no"
            DisplayInternalUI="no"
            SourceFile="..\Resources\OptionalPackage.msi"
            DownloadUrl="https://example.com/download/OptionalPackage.msi" />

Когда пакет необходимо установить, WiX автоматически загрузит его. Имейте в виду, что файл, определенный SourceFile, и файл, определенный DownloadUrl, должны точно совпадать. WiX хэширует SourceFile и сохраняет его в установщике. Он хеширует файл по адресу DownloadUrl после загрузки и устанавливает его только в том случае, если хэш совпадает.

Это решение не было идеальным, поскольку для него требовалось внутреннее соединение, но другого способа удовлетворить наши требования не было. Наша главная проблема заключается в том, что этот .msi является пакетом для каждой машины, а наш установщик работает для каждого пользователя. У нас была консультация с FireGiant, и мы также узнали ответы на несколько других моих вопросов:

  1. Невозможно определить расположение кэша для пакетов из программы установки. Это может быть настроено в Windows системным администратором для локальной машины пользователя, но не нами в нашем установщике.
  2. Тот факт, что WiX не запрашивал повышенные привилегии в описанных мной обстоятельствах, действительно является ошибкой в ​​записи.
24.07.2017
Новые материалы

Коллекции публикаций по глубокому обучению
Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

Представляем: Pepita
Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

Советы по коду Laravel #2
1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

3 способа решить квадратное уравнение (3-й мой любимый) -
1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

Создание VR-миров с A-Frame
Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

Демистификация рекурсии
КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..