Я хочу записать файл преобразования (.mst) в существующий файл установщика (.msi), чтобы правильно управлять службой, которая является частью установки. То есть исполняемый файл службы является частью MSI, но MSI не «знает», что это служба. Предопределенная InstallExecuteSequence работает так:
Action Condition Sequence
...
InstallValidate <null> 1400
RemoveExistingProducts AI_UPGRADE<>"NO" 1450
InstallInitialize <null> 1500
...
StopServices VersionNT 1900
DeleteServices VersionNT 2000
...
RemoveFiles <null> 3500
...
InstallFiles <null> 4000
...
InstallServices VersionNT 5800
StartServices VersionNT 5850
...
InstallFinalize <null> 6600
Первое, что мне нужно было сделать в моем MST, это добавить подходящие записи в (изначально пустые или даже не включенные) таблицы ServiceControl
и ServiceInstall
. Все идет нормально.
Однако теперь у меня есть сомнения относительно InstallExecuteSequence и того, стоит ли мне перемещаться по позициям четырех связанных с сервисом действий:
Документация говорит о RemoveExistingProducts
, как указано выше:
В этом случае программа установки полностью удаляет старые приложения перед установкой новых приложений. Это неэффективное размещение для действия, потому что все повторно используемые файлы должны быть повторно скопированы.
Это меня несколько смутило. Не выполняется ли удаление и копирование файлов (повторно используемых или нет) в действиях RemoveFiles
и InstallFiles
(и, возможно, нескольких связанных)?
Каким-то образом приведенная выше цитата, кажется, предполагает, что (в случае обновления) старая версия моего exe-файла службы будет заменена новой версией до остановки службы (и даже до того, как InstalInitialize
начнет транзакцию установки?!?)
Означает ли это, что я должен рассмотреть вопрос о перемещении действия RemoveExistingProducts
в моем MST? Или переместить действия «Остановить / удалить службы» до RemoveExistingProducts
и, соответственно, действия «Установить / запустить службу» после завершения транзакции установки, т. Е. После InstallFinalize
? Это также не кажется правильным - конечно, эти действия должны быть защищены транзакцией (особенно в случаях, когда транзакция должна быть откатана во время первой установки или полной деинсталляции).
Мое инстинктивное чувство заключается в том, что я не должен волноваться, и все в порядке, как есть, и я просто что-то неправильно понимаю. Так что я был бы благодарен, если бы кто-то мог просветить меня ...