msi Installer для запуска дважды - PullRequest
3 голосов
/ 04 августа 2010

У меня есть программа, которая устанавливается через MSI. MSI был построен с использованием проекта развертывания VS2008 и имеет настраиваемое действие для запуска программы после завершения установки.

После запуска msi я могу просто обновить номер версии, сгенерировать новый код продукта, и msi можно снова запустить на том же ПК. Тем не менее, я хочу иметь возможность запустить MSI второй раз на том же ПК (без использования MSI Repair) и переустановить программное обеспечение снова (даже если ничего не изменилось). Это возможно?

Ответы [ 4 ]

3 голосов
/ 04 августа 2010

Это можно сделать, удалив действие RegisterProduct, действие RegisterUser, действие PublishProduct и действие PublishFeatures из таблицы InstallExecuteSequence. При удалении этих стандартных действий приложение не будет зарегистрировано в системной базе данных MSI, и вы сможете запускать и перезапускать установку снова и снова, как если бы это была первоначальная установка.

MSDN:
Добавление и удаление приложения и отсутствие следов в реестре

0 голосов
/ 16 августа 2010

использовать преобразование экземпляра для второй установки http://msdn.microsoft.com/en-us/library/aa367797(VS.85).aspx

0 голосов
/ 04 августа 2010

Нет, это невозможно.Даже если вы измените ProductCode и ProductVersion, при втором запуске он всегда будет работать в режиме восстановления.Даже метод исправления реализует режим восстановления и в основном использует файл исправления в качестве преобразования.

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

Я достиг этого в прошлом, используя чистую установку InstallScript.После завершения установки я удаляю записи реестра, связанные с ARP, поэтому другая установка будет действовать как новая установка.

0 голосов
/ 04 августа 2010

РЕДАКТИРОВАТЬ: я прочитал это неправильно.

OneSHOT

...