Хобрук: Ваш путь к мастерству в программировании

Ошибка установщика Windows 1316. Установщик ищет неправильное имя файла.

Я пытаюсь реализовать следующий механизм самообновления для своего приложения: если доступно обновление, мое приложение загружает (сгенерированный WiX) пакет MSI и записывает его в свою папку AppData с произвольным именем. Затем приложение инициирует процесс обновления, вызывая

msiexec /fvomus "<ArbitraryName>.msi" /qn /L "<ArbitraryName>.msi.log" REINSTALL=ALL REINSTALLMODE=vomus

При этом я получаю сообщение об ошибке 1316, и установка завершается со статусом ошибки 1603.

Исходное имя файла MSI - CCWirelessServer.msi, но, как я сказал ранее, мое приложение записывает пакет установщика с произвольным именем, например ba17b82d-0ab8-4fc9-aea8-62830042d49f.msi. Я заметил, что установщик Windows по какой-то причине ищет CCWirelessServer.msi файл, а не правильное временное имя файла. Вы можете увидеть это в журнале ниже.

Почему установщик Windows не использует имя файла, указанное мной в командной строке? Это проблема с моими аргументами командной строки или с установочным пакетом?

Вот журнал:

=== Logging started: 24.02.2014  09:16:30 ===
Action start 09:16:30: INSTALL.
Action start 09:16:30: FindRelatedProducts.
Action ended 09:16:30: FindRelatedProducts. Return value 0.
Action start 09:16:30: ValidateProductID.
Action ended 09:16:30: ValidateProductID. Return value 1.
Action start 09:16:30: CostInitialize.
Action ended 09:16:30: CostInitialize. Return value 1.
Action start 09:16:30: FileCost.
Action ended 09:16:30: FileCost. Return value 1.
Action start 09:16:30: CostFinalize.
Action ended 09:16:30: CostFinalize. Return value 1.
Action start 09:16:30: MigrateFeatureStates.
Action ended 09:16:30: MigrateFeatureStates. Return value 0.
Action start 09:16:30: InstallValidate.
Action ended 09:16:30: InstallValidate. Return value 1.
Action start 09:16:30: RemoveExistingProducts.
Action ended 09:16:30: RemoveExistingProducts. Return value 0.
Action start 09:16:30: InstallInitialize.
Action ended 09:16:30: InstallInitialize. Return value 1.
Action start 09:16:30: ProcessComponents.
Action ended 09:16:30: ProcessComponents. Return value 1.
Action start 09:16:30: UnpublishFeatures.
Action ended 09:16:30: UnpublishFeatures. Return value 1.
Action start 09:16:30: RemoveRegistryValues.
Action ended 09:16:30: RemoveRegistryValues. Return value 1.
Action start 09:16:30: RemoveShortcuts.
Action ended 09:16:30: RemoveShortcuts. Return value 1.
Action start 09:16:30: CAUninstallAsService.
Action ended 09:16:30: CAUninstallAsService. Return value 1.
Action start 09:16:30: RemoveFiles.
Action ended 09:16:30: RemoveFiles. Return value 1.
Action start 09:16:30: InstallFiles.
Action ended 09:16:30: InstallFiles. Return value 1.
Action start 09:16:30: CAInstallAsServiceRollback.
Action ended 09:16:30: CAInstallAsServiceRollback. Return value 1.
Action start 09:16:30: CAInstallAsService.
Action ended 09:16:30: CAInstallAsService. Return value 1.
Action start 09:16:30: CreateShortcuts.
Action ended 09:16:30: CreateShortcuts. Return value 1.
Action start 09:16:30: WriteRegistryValues.
Action ended 09:16:30: WriteRegistryValues. Return value 1.
Action start 09:16:30: RegisterUser.
Action ended 09:16:30: RegisterUser. Return value 0.
Action start 09:16:30: RegisterProduct.
MSI (s) (4C:50) [09:16:30:406]: Product: Wireless Server -- Error 1316. A network error occurred while attempting to read from the file: C:\ProgramData\MyCompanyName\Wireless Server\Updates\CCWirelessServer.msi

Error 1316. A network error occurred while attempting to read from the file: C:\ProgramData\MyCompanyName\Wireless Server\Updates\CCWirelessServer.msi
Action ended 09:16:30: RegisterProduct. Return value 3.
Action ended 09:16:30: INSTALL. Return value 3.
MSI (s) (4C:50) [09:16:30:419]: Windows Installer reconfigured the product. Product Name: Wireless Server. Product Version: 1.0.0.0. Product Language: 1033. Manufacturer: MyCompanyName. Reconfiguration success or error status: 1603.

=== Logging stopped: 24.02.2014  09:16:30 ===

Изменить 1:

Просто чтобы убедиться, что проблема связана с произвольным именем файла, я попытался написать пакет обновления с исходным именем файла установщика, и он работает!


Ответы:


1

Попытка изменить имя файла MSI и выполнить небольшое обновление не поддерживается. Видеть:

Рекомендации по установке Windows

Обеспечьте единообразие названий пакетов и кодов пакетов.

.Msi-файлу можно присвоить любое имя, которое помогает пользователям идентифицировать пакет, но имя не следует изменять без изменения кода продукта.

• Дайте вашему файлу .msi удобное имя, которое позволит пользователю идентифицировать содержимое пакета установщика Windows.

• Код продукта является основным идентификатором приложения и должен изменяться при каждом полном обновлении приложения. Для получения информации см. ProductCode и Изменение кода продукта. Изменение имени файла .msi приложения считается всесторонним изменением и всегда требует соответствующего изменения кода продукта для поддержания согласованности.

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

• Обратите внимание, что все буквы в коде продукта и GUID кода пакета должны быть прописными.

Изменение кода продукта

Код продукта необходимо изменить, если для обновления выполняется одно из следующих условий:

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

• Имя файла .msi было изменено.

• Изменился код компонента существующего компонента.

• Компонент удаляется из существующего объекта.

• Существующий объект стал дочерним по отношению к существующему.

• Существующий дочерний объект был удален из родительского объекта.

Почему для изменения имени файла MSI требуется серьезное обновление ?

24.02.2014
Новые материалы

Создание кнопочного меню с использованием HTML, CSS и JavaScript
Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

Внедрите OAuth в свои веб-приложения для повышения безопасности
OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

Классы в JavaScript
class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

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

Как построить любой стол
Я разработчик программного обеспечения. Я люблю делать вещи и всегда любил. Для меня программирование всегда было способом создавать вещи, используя только компьютер и мое воображение...

Обзор: Машинное обучение: классификация
Только что закончил третий курс курса 4 часть специализации по машинному обучению . Как и второй курс, он был посвящен низкоуровневой работе алгоритмов машинного обучения. Что касается..

Разработка расширений Qlik Sense с qExt
Использование современных инструментов веб-разработки для разработки крутых расширений Вы когда-нибудь хотели кнопку для установки переменной в приложении Qlik Sense? Когда-нибудь просили..