ситуация следующая — инсталлирую продукт (дистрибутив создан InstallShield'ом) — удаляю какой-либо компонент инсталляции(файл или например DSN). запускаю проинсталлированную прогу и msiexec пытаеться исправить(доинсталлировать) удаленный компонент
как от этого избавиться
Здравствуйте, Аноним, Вы писали:
А>ситуация следующая — инсталлирую продукт (дистрибутив создан InstallShield'ом) — удаляю какой-либо компонент A>инсталляции(файл или например DSN). запускаю проинсталлированную прогу и msiexec пытаеться A>исправить(доинсталлировать) удаленный компонент
А>как от этого избавиться
Это у вас cрабатывает так называемая Windows Installer Resiliency. Подробную информацию про неё можно взять
наприме в MSDN если поискать вот такую статью PSS ID Number: 290997 (INFO: Description of Resiliency in Windows Installer).
Теперь к вопросу о том как её отключить.
1) В MSDN есть статья: PSS ID Number: 303439 (HOWTO: Disable Windows Installer Resiliency)
в которой, если вкратце то сказано что resiliency отменить нельзя но зато можно выключить
Windows Installer Service на машине и тогда resiliency отмениться сама собой поскольку она — часть installer
2) Можно на самом деле просто удалить информацию о том что программа заинсталлирована из базы данных MSI.
Это делается при помощи msizap, либо прир помощи программки MSICUU (от MS):
здесь
И та и другая утилита позволят удалить информацию о конкретной программе из базы данных msi. Это прирведет вот к чему:
a) resiliency работать на этой программе не будет — потому что msi про неё как-бы ничего не знает
b) удалить эту программу при помощи Add/Remove Programs будет нельзя — из-за этого же
Итог: мне кажется подойдет второй способ.
P.S. Теоретически можно сделать ещ интереснее — база данных msi лежит в regisstry можно перед применением второго
способа этот кусок registry забэкапить, сделать все что нужно, а когда придет пора программу удалять — registry восстановить. Правда тут тоже есть подводные камни — желательно бэкапить не все, а только те кусочки которые относятся к вашей программе — либо быть уверенным что в промежутке ничего нового не инсталлировалось.
Здравствуйте, lkurts, Вы писали:
L>Здравствуйте, Аноним, Вы писали:
А>>ситуация следующая — инсталлирую продукт (дистрибутив создан InstallShield'ом) — удаляю какой-либо компонент A>инсталляции(файл или например DSN). запускаю проинсталлированную прогу и msiexec пытаеться A>исправить(доинсталлировать) удаленный компонент
А>>как от этого избавиться
L>Это у вас cрабатывает так называемая Windows Installer Resiliency. Подробную информацию про неё можно взять
L>наприме в MSDN если поискать вот такую статью PSS ID Number: 290997 (INFO: Description of Resiliency in Windows Installer).
L>Теперь к вопросу о том как её отключить.
L>1) В MSDN есть статья: PSS ID Number: 303439 (HOWTO: Disable Windows Installer Resiliency)
L>в которой, если вкратце то сказано что resiliency отменить нельзя но зато можно выключить
L>Windows Installer Service на машине и тогда resiliency отмениться сама собой поскольку она — часть installer
L>2) Можно на самом деле просто удалить информацию о том что программа заинсталлирована из базы данных MSI.
L>Это делается при помощи msizap, либо прир помощи программки MSICUU (от MS): здесь
L>И та и другая утилита позволят удалить информацию о конкретной программе из базы данных msi. Это прирведет вот к чему:
L> a) resiliency работать на этой программе не будет — потому что msi про неё как-бы ничего не знает
L> b) удалить эту программу при помощи Add/Remove Programs будет нельзя — из-за этого же
L>Итог: мне кажется подойдет второй способ.
L>P.S. Теоретически можно сделать ещ интереснее — база данных msi лежит в regisstry можно перед применением второго
L>способа этот кусок registry забэкапить, сделать все что нужно, а когда придет пора программу удалять — registry восстановить. Правда тут тоже есть подводные камни — желательно бэкапить не все, а только те кусочки которые относятся к вашей программе — либо быть уверенным что в промежутке ничего нового не инсталлировалось.
спасибо за комментарии.
я так понял что отключение этой чудной функциональности без потери возможности Add/Remove возможно только на уровне системы(то есть отключается для всего MSI) HOWTO: Disable Windows Installer Resiliency(PSS ID Number: 303439)
конечно хотелось бы сделать это для конкретного продукта не теряя при этом информации для Add/Remove
еще раз спасибо