Проблема с XML в AppInstaller

Я пытаюсь следовать документации Microsoft, но не понимаю, почему мой установщик приложений не работает:

       <?xml version="1.0" encoding="utf-8"?>
<AppInstaller xmlns="http://schemas.microsoft.com/appx/appinstaller/2018" Uri="https://xxxxxx.blob.core.windows.net/installer/Package.appinstaller" Version="1.0.0.0">
    <MainPackage Name="MyApp" Version="12.21.289.0" Publisher="CN=xxxxxx" ProcessorArchitecture="x64" Uri="https://xxxxxx.blob.core.windows.net/installer/MyApp.msix"/>
    <UpdateSettings> <OnLaunch HoursBetweenUpdateChecks="1" /> <AutomaticBackgroundTask/> </UpdateSettings>
</AppInstaller>

Если я запустил файл MSIX, он установится должным образом. Я пытался следить за этим:https://docs.microsoft.com/en-us/windows/msix/desktop/azure-dev-ops Я получаю эту ошибку: И если я удалю атрибут UpdateSettings, это просто вызовет другая ошибка: "Не удалось установить приложение с сообщением об ошибке: операция установки приложения завершилась неудачно с кодом ошибки 0x80D05011. Подробности: Неизвестная ошибка (0x80d05011)"

Пожалуйста, помогите.

4 ответа

Решение

Если это кому-то поможет, я нашел эту ветку:https://techcommunity.microsoft.com/t5/msix-deployment/windows-10-2004-msix-not-updating-please-check-whether-the/m-p/1466701

В основном ответом было перезапустить вашу машину. Что я и сделал, и, похоже, это исправлено.

Что ж, после трех дней безнадежной отладки и нескольких попыток найти корень этой проблемы мы наконец-то разобрались. См. Обходной путь ниже.

Служба оптимизации доставки неправильно кэширует размер любого получаемого HTTP-ресурса (это может быть файл appinstaller или пакет MSIX) и включает Range Заголовок HTTP в последующих запросах с потенциально устаревшими значениями диапазона байтов.

Например, если длина вашего установщика приложений составляет 725 байт, служба Windows DO в первый раз выполняет правильно сформированный HTTP-запрос и загружает весь XML. Пример запроса:

      GET https://foobar.com/baz.appinstaller HTTP/1.1
Connection: Keep-Alive
Accept: */*
Range: bytes=0-724
User-Agent: Microsoft-Delivery-Optimization/10.0
MS-CV: ......
Content-Length: 0
Host: foobar.com

Но если вы обновили файл appinstaller на своем веб-сервере и его размер увеличился , например, до 4096 байт, DoSvc по- прежнему запрашивает только первые 725 байт и, очевидно, получает неработающий XML, который он не может проанализировать. Даже если ETag обрабатывается правильно и был изменен для HTTP-ресурса appinstaller!

Если размер файла вашего установщика приложений уменьшится , вероятно, вы получите 416 Range Not Satisfiable .

Вот реальный ответ от Amazon S3 (где мы размещаем наш установщик приложений и пакеты MSIX), который мы сбросили с помощью Fiddler:

      HTTP/1.1 206 Partial Content
x-amz-id-2: ...
x-amz-request-id: ...
Date: Tue, 06 Apr 2021 21:45:12 GMT
Last-Modified: Tue, 06 Apr 2021 21:40:24 GMT
ETag: "af2d8bb5c638eca059cdb4dc6c694123"
Accept-Ranges: bytes
Content-Range: bytes 0-724/4096
Content-Type: application/appinstaller
Content-Length: 725
Server: AmazonS3

<?xml version="1.0" encoding="utf-8"?>
<AppInstaller 
  Uri="https://tvd-packages.tradingview.com/beta/latest/win32/TradingView.appinstaller" 
  Version="1.0.0.1071"
  xmlns="http://schemas.microsoft.com/appx/appinstaller/2017/2">
  <MainPackage 
    Name="TradingView.Desktop" 
    Version="1.0.0.1071" 
    Publisher="CN=&quot;TradingView, Inc.&quot;, O=&quot;TradingView, Inc.&quot;, STREET=470 Olde Worthington Road Suite 200, L=Westerville, S=Ohio, PostalCode=43082, C=US" 
    ProcessorArchitecture="x64" 
    Uri="https://tvd-packages.tradingview.com/beta/1.0.0-beta.1.5/win32/x64/TradingView.msix" />
  <UpdateSettings>
    <OnLaunch HoursBetweenUpdateChecks="0" />
  </UpdateSettings>

<!--
- WHAT TH

Вы заметили Content-Range: bytes 0-724/4096а комментарий обрезал ?? Это результат неправильно сформированного запроса диапазона HTTP службой оптимизации доставки.

РЕШЕНИЕ : Вы уже догадались? Ага, просто не меняйте размер установщика приложений! Например, мы дополнили его комментарием XML точно до 4096 байт, и если нам нужно добавить более разумное содержимое в XML, мы просто удаляем некоторые символы из комментария XML, чтобы снова сделать его 4096 байт. Мы даже сделали простой тест размера в нашем конвейере развертывания gitlab, чтобы убедиться, что размер appinstaller не был случайно изменен.

Вы можете проверить наш текущий рабочий установщик приложений, который мы используем с апреля 2021 года: https://tvd-packages.tradingview.com/stable/latest/win32/TradingView.appinstaller

PS Проблема возникает, если запросы выполняются на один и тот же URL. Если URL-адрес изменяется, логика клиента HTTP DoSvc обрабатывает его как другой ресурс. Вот почему файлы appinstaller чаще всего становятся жертвами этой проблемы.

Хотя ответ от Magikarp правильный, если вы прочитаете всю связанную ветку, есть лучший способ обхода.

Разработчики: проблема вызвана тем, что часть номера версии содержит более одной цифры, например 1.0.11.0, что происходит довольно быстро, если вы разрешите процессу сборки автоматически увеличивать их. Обходной путь - перейти на следующую версию (1.1.0.0).

Пользователи: Диспетчер задач -> Службы -> DoSvc -> Перезагрузка. Это немного быстрее и удобнее, чем перезапуск системы.

Для меня это был номер сборки, я не проверял, разрешено ли больше 10 старшим или второстепенным. Я надеюсь на это, потому что в противном случае у нас есть только 999 возможных версий (не может установить ревизию). Надеюсь, MS удастся исправить это до того, как мы это коснемся.

Также обратите внимание: неисправное состояние установщика приложения вызвано этой ошибкой нумерации версий, но как только это произойдет, перезагрузка - единственный способ исправить это.

Чтобы добавить к ответу @user3190036: максимальный номер версии, который мне удалось собрать и установить, был 65535.65535.65535.9

Кажется, что 4-й диапазон - это ошибка, потому что она не соответствует схеме, которая появляется как часть сообщения об ошибке, если вы используете произвольное большое число, подобное этому:

      MakeAppx : error: Error info: error C00CE169: App manifest validation error: The app manifest must be valid as per schema: Line 7, Column 33, Reason: '1.0.125500.9' violates pattern constraint of 
'(0|[1-9][0-9]{0,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])(\.(0|[1-9][0-9]{0,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])){3}'.
The attribute 'Version' with value '1.0.125500.9' failed to parse.

Деконструирование регулярного выражения как

      (0
|[1-9][0-9]{0,3}
|[1-5][0-9]{4}
|6[0-4][0-9]{3}
|65[0-4][0-9]{2}
|655[0-2][0-9]
|6553[0-5])

(\.
(0
|[1-9][0-9]{0,3}
|[1-5][0-9]{4}|6[0-4][0-9]{3}
|65[0-4][0-9]{2}
|655[0-2][0-9]
|6553[0-5])
){3}

мы можем более четко увидеть возможный диапазон значений: 0..65535 для любой из 4 частей, но поскольку есть ошибка, 4-я часть ограничена одной цифрой 0..9.

Наименьший номер версии, который у меня сработал, был 0.0.0.0.

Протестировано на последней версии Win Server 2019 5 мая 2021 г.

Другие вопросы по тегам