Как внедрить параметры конфигурации в пакет MSIX

У меня есть зрелое приложение wcf, в настоящее время упакованное с wix, которое генерирует msi. Когда msi устанавливается на компьютер пользователя (с использованием графического интерфейса wix / msi или с использованием msiexec, автоматизированного с удаленным взаимодействием с PowerShell), они передают такие параметры, как URL-адрес серверной веб-службы приложения, которые сохраняются в файле app.config приложения.

Я хочу заменить процесс установки wix на MSIX. Основное преимущество этого переключателя для меня будет заключаться в том, что пользователи могут сами устанавливать приложение с URL-адреса веб-сервера, вместо того, чтобы отказываться от загрузки и запуска MSI.

Чтобы добиться простого щелчка и установить процесс и иметь возможность размещать мой MSIX в различных клиентских средах, мне нужно каким-то образом установить внутренний URL-адрес моего приложения для каждой среды, когда я создаю приложение. Учитывая, что MSIX - это самоконтейнерный пакет, в котором все его файлы хешируются и подписываются, чтобы гарантировать, что он не подделан, могу ли я отправить другой URL-адрес, когда я готовлю приложение, без необходимости переупаковывать приложение каждый раз, когда я его создаю?

Для контекста приложение - это продукт, который мы настраиваем для множества клиентов, поэтому внутри у нас есть множество сред, в которых мы постоянно развертываем автоматизированные инструменты, поэтому я хочу избежать необходимости динамической переупаковки при настройке новой среды.

Я в основном хочу отправить config, но не внутри msix.


person Alex    schedule 02.10.2020    source источник


Ответы (2)


MSIX меняет способ настройки приложений во время установки. Используя пакет MSIX, вы больше не можете захватывать вводимые пользователем данные (конфигурации приложений) во время установки, а также не можете выполнять какой-либо пользовательский код. Это означает, что у вас больше нет возможности настраивать что-либо во время установки.

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

  1. Это можно сделать как вручную, т. Е. Вы создаете настраиваемые диалоговые окна, которые пользователи будут видеть и заполнять только при первом запуске приложения.

  2. Или вы можете реализовать поддержку автоматической настройки, которая зависит от URL-адреса вашего AppInstaller, то есть каждый из ваших пользователей должен получить другую ссылку AppInstaller. Когда ваш пакет устанавливается в системе, он кэширует эту ссылку, и вы можете запрашивать ее с помощью предопределенных API, таким образом реализуя настраиваемое поведение в вашем приложении на основе прочитанной вами ссылки.

В этот пример с форумов технического сообщества MSIX, который я включил пример, показывающий, как можно сохранить URL-адрес AppInstaller в реестре с помощью сценария PowerShell.

Теперь этот пример основан на интеграции Package Support Framework из Advanced Installer.. Используя этот метод, вы получаете большую гибкость, поскольку вы можете настроить сценарий PS, включенный в пакет MSIX, без изменения кода вашего приложения. Вы даже можете расширить сценарий PS, чтобы обновить файл конфигурации на основе считываемого URL.

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

Очевидно, что версия вашего файла конфигурации по умолчанию должна содержать уникальный заполнитель, таким образом вы можете пропустить проверку URL-адреса AppInstaller, если заполнитель отсутствует (т.е. ваше приложение заменило его соответствующими конфигурациями на основе обнаруженного URL-адреса. )

[Windows.ApplicationModel.Package, indows.ApplicationModel,ContentType=WindowsRuntime]
$path = [Windows.ApplicationModel.Package]::Current.GetAppInstallerInfo().Uri.AbsolutePath

Очень важно! Убедитесь, что вы сохранили файл конфигурации в папке AppData, а не в папке установки (как вы могли бы сделать при использовании MSI). Если вы попытаетесь записать какой-либо файл из папки установки, ваше приложение выйдет из строя.

AppData обрабатывается по-разному для приложений пакета MSIX, вы можете узнать больше здесь:

person Bogdan Mitrache    schedule 05.10.2020

Вы смотрели пакеты модификации?

Они чем-то похожи на файлы преобразования MSI, но могут быть установлены позже, чем файл MSIX (например, надстройка или пакет DLC). По сути, они позволяют добавлять или перезаписывать файлы в виртуальной файловой системе исходного пакета. Ваше приложение может читать файл конфигурации, в котором хранится URL-адрес, который, в свою очередь, можно изменить, установив пакет модификации, без необходимости касаться исходного пакета MSIX.

person zett42    schedule 06.10.2020
comment
Спасибо. Я бегло посмотрел, но я подумал, что они больше предназначены для расширения функциональности с помощью своего рода подключаемой архитектуры или переопределения кода, такого как DI, а не для моей конкретной проблемы, связанной с желанием ввести конфигурацию в процесс установки. Я считаю, что даже с пакетами модификации мне все равно нужно будет упаковывать новый пакет модификации каждый раз, когда я хочу указать своему приложению другой URL-адрес серверной части. - person Alex; 06.10.2020
comment
все равно нужно будет упаковывать новый пакет модификации каждый раз, когда я хочу указать своему приложению другой URL-адрес серверной части - true - person zett42; 06.10.2020