Новые файлы, добавленные в патч, удаляются при удалении, даже если они помечены как постоянные. - PullRequest
0 голосов
/ 15 февраля 2020

Использование InstallShield 2013 в проекте MSI Basi c. У нас есть несколько древних Microsoft COM DLL, которые поставляются в модулях слияния, которые мы включаем в наш MSI. Теперь нам нужно обновить некоторые из этих библиотек DLL, добавив новые в небольшом обновлении (MSP). У нас нет новых модулей слияния от Microsoft, поэтому я пытаюсь выяснить, как установить эти новые библиотеки DLL в наше приложение.

Я добавил 2 новых компонента, по одному для каждого файла, и собрал их. новый MSP. Файлы устанавливаются правильно, хотя мне нужно было зарегистрировать их вручную в настраиваемом действии, иначе исправление будет невозможно удалить (b / c Я изменил таблицу классов). Это все хорошо - пока. Однако, когда я удаляю патч, эти 2 новых файла удаляются !! Это проблема . Я был бы в порядке с их возвращением к предыдущей версии - но нет. Они прямо удалены. Я пометил файлы как Постоянный - та же проблема. Я обнулил GUID для этих двух новых файлов - та же проблема. Я был бы в порядке, если бы они оставались в новой версии, так как они являются файлами MS. Я подозреваю, что это не хранит их, потому что я отмечаю их как постоянные в патче, а не в оригинальном MSI. Правильно?

Here's some MSI log info during the installation of the MSP:

MSI (s) (FC:C4) [16:53:38:949]: File = comctl32.ocx: Final State = Install
MSI (s) (FC:C4) [16:53:38:949]: File = osl.dll1.BD822168_4484_412B_AA08_455F82BE5E0F: Final State = Install
MSI (s) (FC:C4) [16:53:48:371]: SELMGR: Component 'comctl32.ocx' is a new component added to feature 'WDCoreComp'
MSI (s) (FC:C4) [16:53:49:371]: Component: comctl32.ocx; Installed: Absent;   Request: Local;   Action: Local;   Client State: Unknown
MSI (s) (FC:C4) [16:53:53:199]: Baseline: Existing comctl32.ocx version 6.0.81.5 does not match any baseline. Will not be cached.

Here's MSI log info from the uninstall of this MSP:
MSI (s) (FC:B8) [16:57:33:236]: File = comctl32.ocx: Final State = Remove
MSI (s) (FC:B8) [16:57:33:236]: File = osl.dll1.BD822168_4484_412B_AA08_455F82BE5E0F: Final State = Overwrite
MSI (s) (FC:B8) [16:58:01:939]: Executing op: FileRemove(,FileName=C:\Windows\SysWOW64\comctl32.ocx,,ComponentId={100B5DC4-FD2D-4311-9ADE-2B65B814F446})

Я включил туда файл osl.dll, чтобы указать на обычную процедуру исправления для одной из наших библиотек DLL, когда она перезаписывает ее старой версией, но удаляет comctl32.ocx.

Другие параметры кажутся ОЧЕНЬ нежелательными:

  1. используйте Orca, чтобы взломать новые бункеры в старые модули слияния и пересобрать установщик. Надеемся, что патч узнает, что они новые, и правильно их установит
  2. все это сделайте вручную в пользовательских действиях: во время установки сохраните копию этих файлов, а затем установите новые. Во время удаления восстановите старые версии из наших сохраненных копий.
  3. установите файлы во временную папку, скопируйте их в официальную папку MS и зарегистрируйте их там. Удаление приведет к удалению только из временной папки, а не из официального местоположения MS.

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

1 Ответ

0 голосов
/ 19 февраля 2020

Я впервые попробовал # 3, но InstallShit мешал мне на каждом шагу. Я не мог скопировать файлы в папку «Common Files ... \ VBA», что бы я ни пытался. Итак, я закончил делать # 1, хотя я использовал InstallShield для редактирования модулей слияния. К счастью, мне удалось просто заменить корзины и заново сохранить модули слияния.

...