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


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

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



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


Выразить свое отношение к модераторам раздела можно здесь: Profi, Fester
Модераторы: Fester
  
> Wix обновления программы , Minor, major upgrade
    Поясните, пожалуйста: если мне нужно выпускать обновления для программы и необходимо, чтобы 2, 3 и т.д. версии этой программы можно было устанавливать без наличия на компьютере предыдущих версий, то мне нужно использовать major upgrade? Minor не подойдет?
    И еще: как реализовать такую проверку, если установлена 1 версия программы, то мы выполняем одно действие, а если установлена 3 версия программы, то выполняем совсем другое. Помогите, пожалуйста
      Цитата Tatyana Druzenko @
      И еще: как реализовать такую проверку, если установлена 1 версия программы, то мы выполняем одно действие, а если установлена 3 версия программы, то выполняем совсем другое.

      ну как вариант занеси онфрмацию о версии в реестр, при запуске программы проверяй ее, если то то делай то, если это то делай это
        А можно, пожалуйста, пример кода:
        как какую-то переменную (в данном случае версию установленной на компьютере программы) занести в реестр
          Установка major upgrade'а отличается от установки minor upgrade'а командной строкой :) В случае minor upgrade'а нужно использовать проперти REINSTALL и REINSTALLMODE.

          minor upgrade - это такой обрезанный major upgrade :)
          Цитата
          A minor upgrade can be used to add new features and components but cannot reorganize the feature-component tree.


          Я еще не видел ни одной ситуации, когда было бы необходимо использовать minor upgrade :)


          Цитата Tatyana Druzenko @
          как реализовать такую проверку, если установлена 1 версия программы, то мы выполняем одно действие, а если установлена 3 версия программы, то выполняем совсем другое.

          Используя Upgrade Table и FindRelatedProducts Action ты можешь устанавливать проперти в зависимости от того, какой продукт у тебя установлен. Ну а дальше можешь делать все, что тебе надо :) Либо менять InstallLevel, либо Feature level, либо использовать как условие для кастом экшенов или для компонент. Короче говоря все в твоих руках :)


          Besha, все уже давно внесено в реестр, на надо туда писать ничего лишнего ;)
            Везде пишут про элемент MajorUpgrade, который все делает автоматически. Получается, что можно не прописывать Upgrade, InstallExecuteSequence, Property? Или в моем случае нельзя использовать такой простой способ обновления:
            <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." Schedule="afterInstallInitialize" /> ?
            Помогите, пожалуйста примером, потому что я уже запуталась в разных мнениях и решениях, а в книге ничего толком не написано.
              Цитата Tatyana Druzenko @
              Получается, что можно не прописывать Upgrade, InstallExecuteSequence, Property?

              для MajorUpgrade да

              но тебе же еще надо определить какая именно версия была установлена, поэтому без Property не обойтись :)

              ExpandedWrap disabled
                <Property Id="PRODUCT_1">
                   <ProductSearch Minimum="1.0.0" Maximum="1.0.50" UpgradeCode="GUID" />
                </Property>
                 
                <Property Id="PRODUCT_2">
                   <ProductSearch Minimum="1.0.60" Maximum="1.0.150" UpgradeCode="GUID" />
                </Property>
                Спасибо большое за помощь.
                Получается, мне только нужно
                1. объявить эти свойства так, как Вы написали.
                2. Потом присвоить им номер версии программы, которая в данный момент установлена на компьютере
                (так? <SetProperty Id="PROD_1" Value="[ProductCode]" After="AppSearch">(PRODUCT_1)</SetProperty>). ProductCode - переменная, объявленная в файле.
                3. Как потом использовать эти свойства? Где прописывать действия, которые мне нужно сделать, если на компьютере обнаружилась 2-я версия продукта?
                4. Нужно ли вообще вот это: <UpgradeVersion OnlyDetect="no" Minimum="1.0.0.0" IncludeMinimum="yes" Maximum="99.99.99.0" IncludeMaximum="no" Property="PRODUCT_1"/>
                  Tatyana Druzenko, мне кажется, что сначала было бы неплохо сформулировать задание :) А уже после этого будем думать, как это задание решить :) По пунктам.


                  Цитата Tatyana Druzenko @
                  1. объявить эти свойства так, как Вы написали.

                  да


                  Цитата Tatyana Druzenko @
                  2. Потом присвоить им номер версии программы, которая в данный момент установлена на компьютере

                  нет. ничего присваивать не надо, все будет присвоено автоматически


                  Цитата Tatyana Druzenko @
                  3. Как потом использовать эти свойства?

                  так же, как и все другие проперти - в качестве кондишенов или в качестве переменных. не знаю, что тебе нужно :)


                  Цитата Tatyana Druzenko @
                  Где прописывать действия, которые мне нужно сделать, если на компьютере обнаружилась 2-я версия продукта?

                  А что тебе надо делать, если обнаружилась 2-ая версия продукта? И чем эти действия отличаются от случая, если обнаруживается 1-ая версия продукта?

                  Цитата Tatyana Druzenko @
                  4. Нужно ли вообще вот это

                  можно и так. собственно говоря - это, насколько я понимаю, эквивалент элементу MajorUpgrade (разница в том, что если ты используешь MajorUpgrade, то проперти с именем WIX_UPGRADE_DETECTED, а если UpgradeVersion, то можешь задавать имя сама).
                  Сообщение отредактировано: Fester -
                    А какую литературу Вы изучали? Я читала книгу Евгения Воднева, но там про обновления совершенно непонятно :(

                    Задание вот какое:
                    1. Я уже написала инсталятор для программы.
                    2. Теперь еще нужно сделать так, что когда выпустится 2 версия для этой программы, запустят установочник, он определит, что стоит 1 версия и не заменит конфиг-файл программы.
                    3. А вот когда выпустится 3 версия и ее будут устанавливать на компьютеры, то конфиг файл должен измениться (независимо от того 1 версия стояла или уже 2-ая).
                    4. Когда выпустится 4 версия, то (ВОТ ТУТ Непонятно :( )
                    1.если стояла 1 или 2 версия, то конфиг-файл меняется
                    2.если обнаружена 3 версия, то конфиг-файл не меняется

                    При всем при этом! Необходимо, чтобы каждая новая версия программы могла бы быть установлена без наличия на компьютере какой-либо предыдущей версии (то есть просто взять и установить на комп сразу 4 версию - и все должно работать)

                    Я правильно понимаю, что нужно для каждой версии программы писать свой инсталлятор в WIX (то есть создавать отдельный проект в Visual Studio)?
                      Цитата Tatyana Druzenko @
                      А какую литературу Вы изучали?

                      Windows Installer 3.1 - Architektur, Troubleshooting und Patchmanagement, но тебе это врядли пригодится :) Ну и MSDN - там все есть :)




                      Цитата Tatyana Druzenko @
                      2. Теперь еще нужно сделать так, что когда выпустится 2 версия для этой программы, запустят установочник, он определит, что стоит 1 версия и не заменит конфиг-файл программы.
                      3. А вот когда выпустится 3 версия и ее будут устанавливать на компьютеры, то конфиг файл должен измениться (независимо от того 1 версия стояла или уже 2-ая).
                      4. Когда выпустится 4 версия, то (ВОТ ТУТ Непонятно :( )
                      1.если стояла 1 или 2 версия, то конфиг-файл меняется
                      2.если обнаружена 3 версия, то конфиг-файл не меняется

                      Мда, ну и изврат :)
                      Т.е. если пользователь внес какие-то свои изменения, то их просто грохнуть и закатать новый конфиг :) Красота :D


                      Короче :) Для 1-ой версии 1 ничего делать не надо :)

                      Для 2-й версии:
                      ExpandedWrap disabled
                        <Property Id="PRODUCT_V1_INSTALLED">
                          <ProductSearch Minimum="1.0.0" IncludeMinimum="yes" Maximum="2.0.0" IncludeMaximum="no" UpgradeCode="твой UpgradeCode" />
                        </Property>
                         
                        <Component Id="MyApplicationConfig" Guid="{71904D65-2684-4AB2-BFF5-E2DCB2DBEB52}">
                          <File Id="MyConfigFile" Source="SomeSource\config.cfg" />
                          <Condition><![CDATA[NOT PRODUCT_V1_INSTALLED]]></Condition>
                        </Component>


                      В 3-й версии сделаешь так:
                      ExpandedWrap disabled
                        <Property Id="PRODUCT_V1ORV2_INSTALLED">
                          <ProductSearch Minimum="1.0.0" IncludeMinimum="yes" Maximum="3.0.0" IncludeMaximum="no" UpgradeCode="твой UpgradeCode" />
                        </Property>
                         
                        <Component Id="MyApplicationConfig" Guid="{71904D65-2684-4AB2-BFF5-E2DCB2DBEB52}">
                          <File Id="MyConfigFile" Source="SomeSource\config.cfg" />
                          <Condition><![CDATA[PRODUCT_V1ORV2_INSTALLED]]></Condition>
                        </Component>


                      По идее должно работать :)

                      Добавлено
                      Цитата Tatyana Druzenko @
                      Я правильно понимаю, что нужно для каждой версии программы писать свой инсталлятор в WIX (то есть создавать отдельный проект в Visual Studio)?

                      Нет, достаточно сохранять исходник в системе контроля версий.
                        Спасибо большое за помощь, сейчас буду пробовать :D
                          До сих пор не могу понять, как организовать вот этот пункт:

                          4. Когда выпустится 4 версия, то (ВОТ ТУТ Непонятно)
                          1.если стояла 1 или 2 версия, то конфиг-файл меняется
                          2.если обнаружена 3 версия, то конфиг-файл не меняется

                          Писала вот так - выдает ошибку (The Component element contains multiple Condition child elements. There can only be one Condition child element per Component element):

                          <Component Id="SchedulerService.exe.config" Guid="7FAA0D24-FA90-4DF1-8B94-83F257EDB7B3">
                          <File Source="C:\Program Files (x86)\OpenSoft\InkRouter\SchedulerService\SchedulerService.exe.config" Name="SchedulerService.exe.config"/>
                          <Condition><![CDATA[NOT PRODUCT_V3_INSTALLED]]></Condition>

                          <File Source="SchedulerService.exe.config" Name="SchedulerService.exe.config"/>
                          <Condition><![CDATA[NOT PRODUCT_V1ORV2_INSTALLED]]></Condition>
                          </Component>


                          Помогите, пожалуйста, выполнить этот пункт.
                            Fester
                            еще один вопросик появился: а что Вы подразумевали под этой строчкой?
                            <File Id="MyConfigFile" Source="SomeSource\config.cfg" />

                            Конкретно: что должно быть написано в Source?
                              Цитата Tatyana Druzenko @
                              Писала вот так - выдает ошибку (The Component element contains multiple Condition child elements. There can only be one Condition child element per Component element):

                              Ну все правильно :) У компоненты может быть только одно условие. У в твоем варианте у компоненты <Component Id="SchedulerService.exe.config" Guid="7FAA0D24-FA90-4DF1-8B94-83F257EDB7B3"> два условия:
                              <Condition><![CDATA[NOT PRODUCT_V3_INSTALLED]]></Condition>
                              и
                              <Condition><![CDATA[NOT PRODUCT_V1ORV2_INSTALLED]]></Condition>

                              Для 4-й версии файл не надо устанавливать только в том случае, если была найдена 3-ая версия, во всех остальных случаях надо устанавливать. Т.е.
                              <Condition><![CDATA[NOT PRODUCT_V3_INSTALLED]]></Condition>



                              Цитата Tatyana Druzenko @
                              Конкретно: что должно быть написано в Source?

                              Source - это файл, который берется во время сборки MSI.
                                Спасибо :)

                                Добавлено
                                Условие не срабатывает :(
                                Написала вот так

                                <Property Id="PRODUCT_V3_INSTALLED">
                                <ProductSearch Minimum="3.0.0" IncludeMinimum="yes" Maximum="4.0.0" IncludeMaximum="no" UpgradeCode="$(var.UpgradeCode)" />
                                </Property>


                                <Component Id="SchedulerService.exe.config" Guid="7FAA0D24-FA90-4DF1-8B94-83F257EDB7B3">
                                <Condition><![CDATA[NOT Installed OR NOT PRODUCT_V3_INSTALLED]]></Condition>
                                <File Id="SchedulerService.exe.config" Source="$(var.OpenSoft.InkRouter.SchedulerService.TargetDir)SchedulerService.exe.config" Name="SchedulerService.exe.config"/>
                                </Component>


                                Но данный файл не обновляется :(
                                  Цитата Tatyana Druzenko @
                                  Условие не срабатывает

                                  при обновлении с 1-й или 2-ой версии на 4-ю?
                                    да, если стоит 1 или 2 версия и я сразу пробую поставить 4-ю, то файл не обновляется, а надо :(

                                    Добавлено
                                    Я даже убирала условие, то есть писала вот так:
                                    <Component Id="SchedulerService.exe.config" Guid="7FAA0D24-FA90-4DF1-8B94-83F257EDB7B3">
                                    <File Id="SchedulerService.exe.config" Source="$(var.OpenSoft.InkRouter.SchedulerService.TargetDir)SchedulerService.exe.config" Name="SchedulerService.exe.config"/>
                                    </Component>

                                    Добавлено
                                    И все равно не обновляется этот файл, остается от 1 версии
                                    0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                    0 пользователей:


                                    Рейтинг@Mail.ru
                                    [ Script execution time: 0,0423 ]   [ 15 queries used ]   [ Generated: 28.04.24, 13:14 GMT ]