Использование 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.
Другие параметры кажутся ОЧЕНЬ нежелательными:
- используйте Orca, чтобы взломать новые бункеры в старые модули слияния и пересобрать установщик. Надеемся, что патч узнает, что они новые, и правильно их установит
- все это сделайте вручную в пользовательских действиях: во время установки сохраните копию этих файлов, а затем установите новые. Во время удаления восстановите старые версии из наших сохраненных копий.
- установите файлы во временную папку, скопируйте их в официальную папку MS и зарегистрируйте их там. Удаление приведет к удалению только из временной папки, а не из официального местоположения MS.
Номер 3 звучит наименее нежелательно, но все же это плохая форма, чтобы делать все это вручную в пользовательских действиях.