На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ Inno Setup
Пожалуйста, выделяйте текст инсталлятора написанного на Inno Setup тегом [сode=ins] ... [/сode]. Для этого используйте кнопку [code=ins] в форме ответа или выпадающего списка, если нужно вставить код из другой программы.


Обязательно указывать:

  • Программу, используемую для создания инсталлятора.



Если в ходе решения проблемы возникли дополнительные вопросы, по возможности задаем их в той же теме.


Выразить свое отношение к модераторам раздела можно здесь: Profi, Fester
Модераторы: Fester
  
> Принудительное удаление перед установкой. , WIX
    Я хочу чтобы моя MSI перед установкой удаляла уже установленную копию продукта. Но она мне все время выдает сообщение: "Another version of this product already installed. Installation of this version cannot continue. etc...". Как мне отучить ее это делать?
    Я бы написал кастом экшн, который бы вычистил мне все, но я его не могу запусить перед FindRelatedProducts.
      Читай про Upgrade Table, ну и про major upgrdade.
        Как вариант - при каждой новой сборке генерировать новый продукт код, а удалять по апгрейд коду используя RemoveExistingProducts
          Угу, спс, с окошком ошибки - разобрался.
          Но возникала другая беда.
          Из-за кастом экшна установка прекращается без каких-либо внятных объяснений.

          кастом:
          ExpandedWrap disabled
            ...
                    <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>
            ...


          лог:
          ExpandedWrap disabled
            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 - все ОК
            Вопрос с кастом экшном снимается. Длл не грузилась, т.к. импортировала RegDeleteKeyExW(), которой нет в ХРх32.

            Цитата
            Как вариант - при каждой новой сборке генерировать новый продукт код, а удалять по апгрейд коду используя RemoveExistingProducts

            А вот по этому поводу вопрос. Дело в том, что раньше было два компонента, с разными апгрейд и продукт кодами, в двух разных MSI. Теперь же они объединены в одну MSI. Но вполне возможно, что при установки новой MSI у кастомера могут оказаться установлены два старых компонента. Можно ли в этом случае выполнить RemoveExistingProducts для каждого из них?
              Цитата GAGARIN @
              Можно ли в этом случае выполнить RemoveExistingProducts для каждого из них?

              Использовать два Upgrade Element (по одному на каждый апгрейд код) c UpgradeVersion OnlyDetect="no".
              0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
              0 пользователей:


              Рейтинг@Mail.ru
              [ Script execution time: 0,0226 ]   [ 15 queries used ]   [ Generated: 27.04.24, 17:24 GMT ]