#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, не могут быть изменены. Единственный способ добиться такого поведения — получить и применить дополнительные настройки при первом запуске приложения.
-
Это можно сделать как вручную, так и вручную, т. Е. Вы создаете пользовательские диалоговые окна, которые ваши пользователи будут видеть и заполнять только при первом запуске приложения.
-
Или вы можете реализовать автоматическую поддержку настройки, которая зависит от 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