Установщик Windows изменил настройки продукта

Обновлено: 21.11.2024

В этой статье объясняется, как установить новую версию проекта установки с помощью механизма обновления установщика Windows.

Третья статья из серии о настройке Visual Studio

В этой статье объясняется, как установить новую версию проекта установки с помощью механизма обновления установщика Windows.

Введение

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

Основная причина этого заключается в том, что ProductCode Guid идентифицирует продукт для Windows (см. свойства проекта установки на рис. 1). Поскольку вы уже установили продукт, указанный этим идентификатором Guid, вы должны использовать механизм обновления установщика Windows, чтобы установить новую версию вашего продукта.

Как обновить свой продукт

Visual Studio поддерживает механизм свойств проекта RemovePreviousVersions в своей интегрированной среде разработки. На рис. 1 показано, что значение равно false. Когда вы будете готовы создать новую версию своего продукта для замены старой, выполните следующие действия:

  • Увеличьте значение свойства версии (см. рис. 1). Visual Studio отображает окно сообщения, предлагающее изменить ProductCode и PackageCode. Выберите да.
  • Установите для свойства RemovePreviousVersions значение true.

Установка для свойства RemovePreviousVersions значения true удаляет предыдущие версии продукта из системы при установке новой версии. Поскольку продукты идентифицируются по идентификатору ProductCode Guid, изменение ProductCode создает новый продукт. То есть старый продукт удаляется при установке нового. Обратите внимание, что свойство версии, которое становится свойством ProductVersion установщика Windows, является ключевой частью данных, связанных с обновлением вашего продукта. Это не просто описательная строка.

На рис. 1 также показано свойство DetectNewerInstalledVersion, которое во время установки проверяет, не пытаетесь ли вы обновить существующую установленную версию более старой версией.

Прежде чем описывать, как работает RemovePreviousVersions, я объясню, как взаимодействуют PackageCode и ProductCode.

Код пакета, код продукта и восстановление

PackageCode — это идентификатор Guid, который однозначно идентифицирует файл MSI, из которого был установлен продукт. Когда вы устанавливаете файл MSI, PackageCode и ProductCode записываются в систему. Когда вы пытаетесь установить другой файл MSI, PackageCode и ProductCode взаимодействуют двумя способами:

    Если новый файл MSI имеет тот же ProductCode и PackageCode, что и уже установленный продукт, Windows указывает, что вы должны восстановить или удалить продукт (см. рис. 2). Удаление удаляет продукт, но восстановление может привести к еще большей путанице.

    < /ул>

    Вы не можете установить свойство PackageCode (рис. 1). Вместо этого Visual Studio при необходимости создает новый.

    При установке продукта Windows кэширует копию файла MSI в папке Windows\installer и записывает расположение, из которого изначально был установлен MSI. Кэшированный файл MSI содержит данные из исходного файла MSI, но не содержит фактических файлов, поэтому его можно использовать для проверки правильности установки продукта. Если есть какие-либо отсутствующие файлы, Windows перейдет к записанному месту установки, чтобы получить установочный файл MSI. Если инициировано восстановление, Windows может запросить исходный компакт-диск или сетевое расположение.

    Обновление продукта

    Другой Guid, UpgradeCode, распознает, что установлена ​​предыдущая версия (см. рис. 1). Если для параметра RemovePreviousVersions задано значение true, Visual Studio создает файл MSI, который проверяет наличие других установленных продуктов с тем же UpgradeCode и удаляет их. Это называется основным обновлением установщика Windows.

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

    Возможно, вам придется принять это во внимание при сборке первой версии установочного пакета. Например, может быть лучше, чтобы ваше приложение создавало файлы данных во время выполнения, а не добавляло их в установку. Это гарантирует, что RemovePreviousVersions не удалит их и перенесет в следующую версию продукта.

    Все или только я?

    Во время установки в диалоговом окне, в котором вы выбираете папку для установки, вы также устанавливаете переключатели «Все» или «Только я» (см. рис. 3).С точки зрения установщика Windows, это выбор между установкой для каждого компьютера (для всех пользователей системы) или установкой для каждого пользователя (для устанавливающего пользователя). Установка для всех не обновляет установку только для меня, и наоборот.

    В интегрированной среде разработки Visual Studio 2003 невозможно предварительно установить параметр «Все/только я». На рис. 4 показаны свойства проекта установки в бета-версии 1 Visual Studio 2005. Обратите внимание, что существует свойство InstallAllUsers для установки поведения по умолчанию.

    Не забывайте о проблемах

    Внутренняя логика, использующая UpgradeCode для поиска других версий продукта, позволяет использовать диапазон значений версий. Инструмент под названием Orca в разделе Windows Installer пакета SDK для платформы можно использовать для просмотра и редактирования файлов MSI. Подробнее об этом позже.

    На рис. 5 показаны значения таблицы обновлений в файле MSI. Значения VersionMin и VersionMax показывают диапазон значений для поиска, но Visual Studio не позволяет указать этот диапазон версий, который начинается с 1.0.0. Например, если вы неравнодушны к версиям до 1.0–0.5, ваш метод RemovePreviousVersions не будет работать.

    Пользовательские действия при обновлении RemovePreviousVersions также могут привести к неожиданным результатам. При серьезном обновлении установщика Windows настраиваемые действия вызываются в том же пространстве процессов.

    Другие типы обновлений

    Продукты можно обновлять с помощью исправлений установщика Windows или файлов MSP. Главное преимущество таких пластырей в том, что они небольшие. Патчи функционируют как дельта между одной версией файла MSI и другой — разница между таблицами MSI — и новыми версиями обновленных файлов. В оптимизациях, которые производят наименьшие исправления, исправления содержат двоичные исправления для отдельных файлов. В случаях, когда размер меньше оптимизирован, исправления содержат весь измененный файл.

    Исправления можно создавать с использованием файлов PCP, описанных в документации SDK установщика Windows. Однако я не рекомендую создавать исправления на основе установок, созданных установками Visual Studio, поскольку у вас недостаточно контроля над тем, как Visual Studio создает файлы MSI. В частности, создание исправлений зависит от имени внутреннего файла CAB и связанных потоков, встроенных в файл MSI. Несоответствие между старой и новой версиями приведет к ошибке 2356 при установке исправления.

    Экспертный режим

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

    Программа установки не такая. Он вносит изменения в систему, многие из которых находятся в таких важных областях, как реестр Windows. После внесения этих изменений уже слишком поздно заменять программу установки новой, поскольку эти изменения и ущерб, который они могут нанести, уже присутствуют в системе.

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

    Если вы хотите узнать больше о том, что происходит внутри файлов MSI, взгляните на инструмент под названием Orca из раздела установщика Windows пакета Platform SDK. Если вы устанавливаете из Orca.msi в папку \bin, вы увидите таблицы и их содержимое в файле MSI.

    Я использую слово "таблицы", потому что файл MSI представляет собой базу данных, а таблицы и их использование задокументированы в Platform SDK. Файлы MSI прозрачны — вы можете видеть все, кроме содержимого двоичных файлов, используемых в настраиваемых действиях, создаваемых Visual Studio. Чтобы увидеть, что происходит, взгляните на таблицу InstallExecuteSequence файла MSI вместе с журналом установки этого файла MSI с помощью командной строки следующего типа:

    Программа установки не позволяет мне изменить название продукта

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

    Не могли бы вы рассказать нам, какой проект вы используете для создания программы установки?

    просто в информационных целях, вот что это за проект:

    требуется расширение установщика установки от Microsoft.

    1 ответ

    Я предполагаю, что вы загрузили расширение Microsoft Visual Studio Installer Projects и пытаетесь его использовать. Я немного смущен тем, что вы подразумеваете под «это не изменится».Похоже, что с самой программой установки все в порядке, но, возможно, заголовок, отображаемый в пользовательском интерфейсе, неверен.

    Если вы используете окно "Свойства" в проекте установки, вы можете изменить ProductName, которое по умолчанию используется в тексте приветствия. Существует также свойство Title. Имя исполняемого файла следует за именем проекта. Пока не совсем уверен, на что влияет свойство Title.

    Вы можете пояснить, где текст неверен?

    вот скриншот неправильного вида в установщике:

    вот каким должен быть текст через название продукта в Visual Studio:

    Этот текст поддерживается именем ProductName, которое вы изменили. На ум приходит пара вещей.

    Вы перекомпилировали код и получили какие-либо ошибки, из-за которых он не заменил исходный двоичный файл?

    Вы уверены, что запускаете собранный двоичный файл (например, Debug, а не Relesae)? Здесь может помочь очистка сборки.

    Изменили ли вы приветственное сообщение (хотя строка заголовка тоже кажется перепутанной)?

    Пакет MSI установщика Windows использует несколько глобальных уникальных идентификаторов (GUID) в качестве кодов для идентификации определенных сведений о пакете.

    Код пакета

    Он используется для уникальной идентификации каждого пакета MSI. Установщик Windows не позволяет устанавливать два разных пакета MSI с одинаковым кодом пакета на один и тот же компьютер. Расширенный установщик создает новый каждый раз при сборке проекта и создании нового пакета. При запуске MSI с установленным кодом пакета появится диалоговое окно «Изменить/восстановить/удалить обслуживание».

    Код обновления

    Определяет семейство, набор связанных продуктов. Расширенный установщик генерирует новый код обновления всякий раз, когда запускается новый проект. Код обновления никогда не изменится для любой версии одного и того же продукта.

    Код продукта

    Он используется для уникальной идентификации конкретной версии продукта. Установщик Windows позволяет одновременно устанавливать на компьютер только одну программу с данным кодом продукта. Это предотвратит установку второго MSI с тем же кодом продукта, что и установленный в данный момент. Расширенный установщик будет пытаться создать новый код продукта каждый раз, когда вы меняете версию продукта.

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

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

    • Если параметр «Автоматически обновлять старые версии. ” на странице обновлений, при установке установщик Windows выполнит поиск и удаление всех продуктов с одинаковым кодом обновления и более старыми версиями.
    • Если параметр «Разрешить параллельную установку. ” на странице обновлений, установщик Windows позволит установить разные версии одного и того же продукта на один и тот же компьютер.

    Еженедельный веб-семинар с демонстрацией продукта Хотите принять участие в еженедельной демонстрации продукта? Выберите предпочтительный временной интервал.

    Настройки проекта управляют теми аспектами вашей установки, которые недоступны в вашем сценарии установки. Эти настройки позволяют, среди прочего, изменить название и код продукта. Чтобы получить доступ к настройкам вашего проекта:

    • Нажмите SHIFT+CTRL+F11.
    • На вкладке "Проект" в группе "Управление" нажмите "Настройки проекта" .
    • На вкладке MSIcode в группе "Компиляция" нажмите "Настройки проекта" .

    Эта страница позволяет определить самые основные аспекты вашей установки.

    Введите здесь название вашей компании.

    Введите здесь название продукта, который программа установки установит. Это имя будет доступно в сценарии установки как переменная TITLE.

    Введите здесь версию устанавливаемого продукта.

    Нажмите кнопку "Создать", чтобы сгенерировать новый код продукта. Код продукта однозначно идентифицирует вашу установку для установщика Windows.Он должен быть уникальным в каждом отдельном продукте, а также в разных версиях одного и того же продукта. Этот код будет доступен в скрипте как переменная PRODUCTCODE.

    Обновляет продукт с помощью кода продукта

    Если ваша установка обновляет предыдущую версию, введите здесь код продукта этой версии.

    Выберите язык установки по умолчанию из раскрывающегося списка.

    Выбор языка отображения

    Эта страница позволяет составить сводную информацию о потоке, которая будет доступна в базе данных установщика Windows. Обязательно задайте уникальный код редакции, нажимая кнопку «Создать» каждый раз, когда вы меняете код продукта, определенный на узле проекта. На этой странице также можно вручную установить уровень привилегий Vista UAC.

    Выберите нужный уровень доступа UAC с помощью этого поля со списком. Значение по умолчанию — максимально доступный. Этот параметр не записывается в файл MSI и действует только в Vista или более новых операционных системах, когда включен контроль учетных записей.

    Вы также можете просмотреть команду «Выполнить программу от имени» для соответствующего параметра снижения прав UAC и представление «Требования к приложению» для соответствующего параметра обнаружения повышения прав UAC.

    Эта страница позволяет настроить способ отображения вашего приложения в апплете "Установка и удаление программ" панели управления. Заполните поля по мере необходимости. Значение, введенное в поле «Имя издателя», будет доступно в сценарии установки как переменная COMPANY.

    Здесь вы также можете настроить значок, используемый вашей установкой, нажав кнопку "Загрузить значок".

    Узел переменных компилятора

    На этой странице отображается список всех определенных переменных компилятора для текущего проекта. Нажмите кнопку «Добавить», чтобы определить новую переменную. Дважды щелкните существующую переменную или выберите существующую переменную и нажмите кнопку «Изменить», чтобы изменить ее. Нажмите кнопку Удалить после выбора одной или нескольких переменных компилятора, чтобы удалить их.

    Читайте также: