Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.147.54.6] |
|
Сообщ.
#1
,
|
|
|
Я хочу чтобы моя MSI перед установкой удаляла уже установленную копию продукта. Но она мне все время выдает сообщение: "Another version of this product already installed. Installation of this version cannot continue. etc...". Как мне отучить ее это делать?
Я бы написал кастом экшн, который бы вычистил мне все, но я его не могу запусить перед FindRelatedProducts. |
Сообщ.
#2
,
|
|
|
Читай про Upgrade Table, ну и про major upgrdade.
|
Сообщ.
#3
,
|
|
|
Как вариант - при каждой новой сборке генерировать новый продукт код, а удалять по апгрейд коду используя RemoveExistingProducts
|
Сообщ.
#4
,
|
|
|
Угу, спс, с окошком ошибки - разобрался.
Но возникала другая беда. Из-за кастом экшна установка прекращается без каких-либо внятных объяснений. кастом: ... <CustomAction Id="RemoveInstalledAgents" BinaryKey="AgentConfigDll" DllEntry="RemoveInstalledAgents" Return="check" Execute="deferred" Impersonate="no" /> ... <InstallExecuteSequence> ... <Custom Action="RemoveInstalledAgents" After="RemoveExistingProducts"> <![CDATA[NOT REMOVE~="ALL"]]> </Custom> ... </InstallExecuteSequence> ... лог: MSI (s) (34:78) [21:33:16:375]: Executing op: ActionStart(Name=RemoveInstalledAgents,,) MSI (s) (34:78) [21:33:16:406]: Executing op: CustomActionSchedule(Action=RemoveInstalledAgents,ActionType=3073,Source=BinaryData,Target=RemoveInstalledAgents,) MSI (s) (34:78) [21:33:16:406]: Creating MSIHANDLE (10726) of type 790536 for thread 1400 MSI (s) (34:84) [21:33:16:406]: Invoking remote custom action. DLL: C:\WINDOWS\Installer\MSIB.tmp, Entrypoint: RemoveInstalledAgents MSI (s) (34:F8) [21:33:16:406]: Generating random cookie. MSI (s) (34:F8) [21:33:16:421]: Created Custom Action Server with PID 1680 (0x690). MSI (s) (34:80) [21:33:16:468]: Running as a service. MSI (s) (34:94) [21:33:16:484]: Hello, I'm your 32bit Elevated custom action server. MSI (s) (34:84) [21:33:16:734]: Closing MSIHANDLE (10726) of type 790536 for thread 1400 Action ended 21:33:16: InstallExecute. Return value 3. НО. Кастом экшн выполняется и установка завершается, если я в проекте ДЛЛ заэксклудю один сорец. Сорец - ООП обертка над АПИ работы с реестром. Вертаю сорец - снова падает. Иногда все проходит нормально, если выкусать половину сорца. В это вот как вообще такое?) Добавлено Да, это просиходит на ВинХРх32, проверил на Вин7х64 - все ОК |
Сообщ.
#5
,
|
|
|
Вопрос с кастом экшном снимается. Длл не грузилась, т.к. импортировала RegDeleteKeyExW(), которой нет в ХРх32.
Цитата Как вариант - при каждой новой сборке генерировать новый продукт код, а удалять по апгрейд коду используя RemoveExistingProducts А вот по этому поводу вопрос. Дело в том, что раньше было два компонента, с разными апгрейд и продукт кодами, в двух разных MSI. Теперь же они объединены в одну MSI. Но вполне возможно, что при установки новой MSI у кастомера могут оказаться установлены два старых компонента. Можно ли в этом случае выполнить RemoveExistingProducts для каждого из них? |
Сообщ.
#6
,
|
|
|
Цитата GAGARIN @ Можно ли в этом случае выполнить RemoveExistingProducts для каждого из них? Использовать два Upgrade Element (по одному на каждый апгрейд код) c UpgradeVersion OnlyDetect="no". |