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

#msix

#msix

Вопрос:

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

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

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

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

Я в основном хочу отправить конфигурацию с, но не внутри msix.

Комментарии:

1. Вы нашли решение своего вопроса? Мы сталкиваемся с очень похожим сценарием…

Ответ №1:

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

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

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

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

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

Теперь этот пример основан на интеграции платформы поддержки пакетов из 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, вы можете прочитать больше здесь:

Ответ №2:

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

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

Комментарии:

1. Спасибо. Я посмотрел кратко, но подумал, что они больше предназначены для расширения функциональности с помощью какой-то подключаемой архитектуры или переопределения кода, такого как DI, а не для моей конкретной проблемы с желанием внедрить config в процесс установки. Даже с пакетами изменений, я полагаю, мне все равно нужно будет упаковывать новый пакет изменений каждый раз, когда я захочу указать своему приложению другой внутренний URL.

2. «все равно нужно было бы упаковывать новый пакет изменений каждый раз, когда я хотел указать свое приложение на другой серверный URL» — true