Записи таблицы свойств пакета MSI для включения выпусков обновлений

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

Какие записи в таблице свойств необходимы?

=========

Приведенный ниже ответ помог мне преодолеть мою первоначальную проблему, и я благодарю Ciprian за его помощь. Мое основное обновление msi теперь удаляет существующий продукт, НО не полностью переустанавливает продукт. Мой продукт состоит из нескольких текстовых файлов, файла справки и файла .exe. Файл .exe не переустанавливается.

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


person Mike D    schedule 07.02.2012    source источник
comment
Для получения дополнительных сведений создайте журнал установки: stackoverflow.com/questions / 7126077 / create-an-msi-log-file   -  person Ciprian    schedule 08.02.2012
comment
@ciprian: Возможно, я не менял PackageCode. Это требуется? Я попробую еще раз сегодня днем.   -  person Mike D    schedule 08.02.2012
comment
Нет, это не обязательно. PackageCode однозначно определяет файл MSI, поэтому он должен отличаться, но не влияет на процесс обновления.   -  person Ciprian    schedule 08.02.2012
comment
Я создал новый msi, как описано выше, назначил ему новый код пакета и поместил новый действительный код продукта в таблицу свойств. Когда я запускаю напрямую или использую msiexec, я вижу только варианты удаления и восстановления. Новые файлы не устанавливаются. Файл журнала находится здесь mywebspace.wisc.edu/mdorl/msilog/log.log IMHO, похоже, msiexec определила программное обеспечение в порядке и определила старый и новый пакеты msi.   -  person Mike D    schedule 10.02.2012
comment
Я начинаю понимать, что единственный способ выполнить обновление - это использовать msiexec с правильными параметрами удаления. Это правильно? Или можно сделать серьезное обновление, используя только файл .msi? Я не хочу выпускать обновление в виде setup.exe и сопровождающих его файлов .ini и .msi, поскольку это, кажется, приглашает пользователя вмешаться.   -  person Mike D    schedule 11.02.2012
comment
Изучив ваш журнал, я заметил, что действия продуктов FindRelatedProducts и RemoveExisting отсутствуют. Вы также должны добавить их в MSI, потому что они фактически выполняют обновление. msdn.microsoft.com/en -us / library / windows / desktop /   -  person Ciprian    schedule 11.02.2012
comment
Спасибо, после следующего ничего не изменилось. Взяв подсказку из orca.msi и взглянув на документы, я добавил FindRelatedProducts в таблицу InstallExecuteSequence с последовательностью 200 сразу после LaunchConditions и в таблицу InstallUISequence с последовательностью 200 сразу после LaunchConditions (в моем msi нет PrepareDLG, как есть в Orca). Я добавил продукты RemoveExisting в таблицу InstallExecuteSequence в самом конце с последовательностью 6700.   -  person Mike D    schedule 11.02.2012
comment
Я также попытался переместить RemoveExistingProducts между InstallValidate и InstallInitialize с последовательностью 1450, но все равно безуспешно.   -  person Mike D    schedule 11.02.2012
comment
Файл журнала сверху находится здесь mywebspace.wisc.edu/mdorl/msilog/log.log Я вижу действие FindRelatedProducts, НО ничего на RemoveExistingProducts; он идет прямо из InstallValidate в InstallInitialize. MSI находится здесь mywebspace.wisc.edu/mdorl/msilog/sbl_Major.msi.   -  person Mike D    schedule 11.02.2012
comment
Я не могу найти действие FindRelatedProducts в журнале. Возможно, вы не опубликовали правильный журнал   -  person Ciprian    schedule 11.02.2012
comment
Я обнаружил, что не менял PackageCode, поэтому я это сделал. Тогда запуск .msi выглядел иначе. Мне не был представлен экран восстановления / удаления, но он выглядел как нормальный, ничего не установил. НО ни один из файлов не был заменен, и не было упоминания об удалении старых версий.   -  person Mike D    schedule 11.02.2012
comment
Продолжить предыдущий комментарий. Затем я нашел две записи в программах добавления / удаления, новая была меньше старой. Когда удалил старую, с файлами ничего не случилось. Когда я удалил меньший новый, я увидел, что какое-то диалоговое окно настройки вспыхнуло, а затем все исчезло.   -  person Mike D    schedule 11.02.2012
comment
Файл журнала из приведенного выше находится здесь mywebspace.wisc.edu/mdorl/msilog/log2. журнал   -  person Mike D    schedule 11.02.2012
comment
Действие FindRelatedProducts, похоже, не находит уже установленный MSI. У них один и тот же UpgradeCode   -  person Ciprian    schedule 12.02.2012
comment
Да, код UpgradeCode как в установленном, так и в новом msi имеет {71D2224D-1BA7-46E9-B403-A4A54D5B87B4}. Он также отображается как код обновления для первой и единственной строки в новой таблице обновлений msi. Теперь я понимаю, что у меня плохая версия продукта, например 2012.0207; Может ли это быть проблема?   -  person Mike D    schedule 12.02.2012
comment
Я изменил атрибуты таблицы обновлений с 769 на 1 безрезультатно. Попробую позже с легальной версией продукта.   -  person Mike D    schedule 12.02.2012
comment
Изменены как старые, так и новые версии, чтобы иметь действительную версию продукта. Например. 12.02.07. Также измените Обновить таблицу ActionProperty на SOLARUPGRADE и добавив свойство SecureCustomProperties в таблицу свойств в новом msi. Те же результаты.   -  person Mike D    schedule 12.02.2012
comment
позвольте нам продолжить это обсуждение в чате   -  person Mike D    schedule 12.02.2012


Ответы (2)


Я не знаю, как MSICREATE обрабатывает сценарий обновления. Однако вы можете добиться этого с помощью ORCA. Вот подробный пример обновления из MSDN.

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

person Ciprian    schedule 07.02.2012

Вот что я добавил в свой msi, используя orca, чтобы произвести серьезное обновление. Как я уже сказал выше, у меня все еще есть проблема в том, что мой .exe-файл не переустанавливается при крупном обновлении. .Exe добавляется при ремонте.

Таблица InstallExecuteSequence

  • добавлен FindRelatedProducts с последовательностью 400
  • добавлен RemoveExistingProducts с последовательностью 1450

Таблица InstallUISequence

  • добавлен FindRelatedProducts с последовательностью 200

PropertyTable

  • добавлено RemovePreviousVersions TRUE
  • добавлен SECURECUSTOMPROPERTIES SOLARUPGRADE
  • имел существующий UpgradeCode с guid, созданным MSICREATE
  • имел существующий ProductVersion 12.2.12.0 создал мой MSICREATE

Добавлена ​​таблица обновлений

  • UpgradeCode то же значение, что и Upgrade в таблице свойств
  • VersionMin null
  • ВерсияМакс 99.12.31
  • Атрибуты 1
  • ActionProperty SOLARUPGRADE (то же значение, что и SECURECUSTOMPROPERTIES в таблице свойств)

Я также назначил новый PackageCode и новый ProductCode, чтобы новый msi имел другие значения PackageCode, ProductCode и ProductVersion, чем ранее установленный продукт.

person Mike D    schedule 13.02.2012