Wise Installer не удаляет старые файлы при обновлении

У нас есть устаревший установщик, созданный с помощью Wise, и у нас есть ситуация, когда некоторые файлы .ASP были заменены соответствующими файлами .INC для решения проблем безопасности; поэтому во время обновления эти старые файлы .ASP должны быть удалены. Он работает в одном из каталогов, но в двух других каталогах после обновления остались старые файлы .ASP.

Для всех каталогов на веб-сайте есть запись RemoveFile, которая сообщает установщику удалить все файлы во время удаления, поэтому я подумал, что этого будет достаточно, чтобы заставить установщика удалить эти старые файлы, но, по-видимому, нет.

Пытаясь решить проблему, я добавил записи RemoveFile, которые удаляют определенные файлы при установке, и снова попытался выполнить обновление, но даже это не сработало.

Если не считать написания пользовательского действия для избавления от этих файлов, есть ли у кого-нибудь идеи о том, как заставить его работать?


person RobH    schedule 23.06.2016    source источник


Ответы (2)


В установщике Windows все дело в руководствах по компонентам. Если бы у вас была установка из 10 файлов, все они имели бы уникальные идентификаторы компонентов. Если вы делаете серьезное обновление продукта, которому больше не нужны пять из этих файлов и который заменяет пять других, то, очевидно, вы не добавляете старые файлы в обновление, но также добавляете эти пять новых файлов с пятью новыми идентификаторами компонентов. Другими словами, симптомы предполагают, что вы добавили новые файлы, но сохранили существующие справочники компонентов. Крупное обновление включает в себя удаление старого продукта, но использование тех же идентификаторов компонентов приводит к тому, что счетчик ссылок для идентификатора никогда не становится равным нулю, что приводит к удалению этих компонентов (и, следовательно, файлов).

Кроме того, если компонент когда-либо был помечен как постоянный или файлы когда-либо были помечены как общие, файлы не будут удалены. Пометка компонента как постоянного прикрепляет его к системе, поэтому пересборка MSI и пометка его как непостоянного не исправит его. Компонент имеет дополнительную запись. Когда файл явно помечен как общий, это означает, что он может быть установлен с помощью установки, отличной от MSI (и не будет учитываться ссылка на guid компонента), поэтому в реестре будет запись в SharedDlls, потому что MSI было сказано, что есть другой не-MSI-клиент. SharedDll можно посмотреть в реестре, чтобы узнать, произошло ли это. Счетчик ссылок компонента обнаружить труднее, но подробный журнал обновления может помочь. Этот сценарий VB покажет все установленные компоненты и продукты, которые их используют:

Option Explicit
Public installer, fullmsg, comp, a, prod, fso, pname, ploc, pid, psorce

Установите fso = CreateObject("Scripting.FileSystemObject") Установите a = fso.CreateTextFile("comps.txt", True)

' Подключиться к объекту установщика Windows Set installer = CreateObject("WindowsInstaller.Installer") a.writeline ("MSI Components") при ошибке возобновить следующий For Each comp In installer.components a.writeline (comp & "используется продуктом: ") для каждого продукта в Installer.ComponentClients (comp) pid = installer.componentpath (prod, comp) pname = installer.productinfo (prod, "InstalledProductName") a.Writeline (" " & pname & " " & prod & "и устанавливается в "& pid) Далее Далее

enter code here
person PhilDW    schedule 23.06.2016
comment
Что уж говорить о мелких доработках. Как я уже сказал, в одном из трех каталогов, где файлы .ASP были заменены соответствующими файлами .INC, файл .ASP (в данном случае только один) был удален во время обновления, а в двух других каталогах ни один из файлов . Файлы ASP были удалены. Во всех трех случаях записи файла были сгенерированы с помощью подстановочного знака; в одном из случаев, когда это не сработало, и в том, что сработало, имя компонента не менялось, а файлом ключа был какой-то другой файл. В третьем случае имя компонента изменилось, потому что в папке было всего 2 файла .ASP->.INC. - person RobH; 24.06.2016
comment
И ни один из GUID не изменился ни для одного из этих трех компонентов. Кстати, я устал менять GUID двух компонентов, где удаление старых файлов .ASP не помогло, и результат был тот же; старые файлы .ASP остались. - person RobH; 24.06.2016

Оказывается, моя проблема не была связана с MSI. Одним из настраиваемых действий при установке было резервное копирование всех файлов веб-сайта, чтобы их можно было восстановить с помощью другого настраиваемого действия позже при обновлении, что приводило к тому, что большинство файлов .ASP, которые мы хотели удалить, помещались обратно. В одном каталоге, где старый файл .ASP, казалось, был удален, это произошло потому, что этот каталог был скрыт и, следовательно, не был зарезервирован и, следовательно, не восстановлен. Между резервным копированием и восстановлением MSI фактически выполнял свою работу и удалял все из старой сборки до установки нового. (Показывает, как долго я был вдали от этого проекта, что я забыл, что это происходит. :-( )

person RobH    schedule 28.06.2016