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


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

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



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


Выразить свое отношение к модераторам раздела можно здесь: Profi, Fester
Модераторы: Fester
  
> WIX: Minor update , Изменение комонент при minor update
    Всем привет!
    Есть работающая инсталляция, которая может быть установлена явно, а может накатывается как minor update
    (из командной строки вызывается
    msiexec /i "Setup.msi" REINSTALL=FeatureName1,FeatureName2 REINSTALLMODE=va /l*v Log.txt).
    Всё работает, если в новой версии нет удаления компонент (Component). Но в очередной версии инсталлятора это случилось: одна из компонент была удалена. При этом не обновилась вся фича (Feature), в которую входил данный компонент
    (в логе написалось что-то типа
    MSI (s) (38:98) [12:01:21:992]: Feature: Feature1; Installed: Absent; Request: Null; Action: Null).
    Вопрос: можно ли что-то сделать, чтобы minor update нормально отрабатывал в этой ситуации (пусть даже не удалял бы этот компонент, а просто обновлял бы другие компоненты этой фичи и добавлял новые).
    З.Ы. Я знаю, что в msdn написано, что minor update, small update и патчи не поддерживают удаление компонент из фич, но очень не хочется всё переделывать...
    З.Ы.2. Если это всё же невозможно, подскажите, пжлта, как ещё можно организовать переустановку продукта, чтобы не пришлось вводить заново все параметры (проходить по всем диалогам), ибо их очень долго заново заполнять.
      Ну в MSDN пишут
      ExpandedWrap disabled
        A minor upgrade can be used to add new features and components but cannot reorganize the feature-component tree.

      Цитата kong83 @
      Если это всё же невозможно, подскажите, пжлта, как ещё можно организовать переустановку продукта, чтобы не пришлось вводить заново все параметры (проходить по всем диалогам), ибо их очень долго заново заполнять.

      Думаю Major Upgrade тебе поможет.
        При Major Upgrade у меня возникло две проблемы:
        1. Несмотря на то, что я не меняю UpgradeCode и название продукта, меняю ProductionCode и увеличиваю версию - инсталляция не находит предыдущей версии и, соответственно, не удаляет её. Получается, что в Установке/Удалении программ накапливаются установленные разные версии моей программы.
        2. От меня при установке требуют ввести заново все параметры, а этого хотелось бы избежать.
        Может быть есть какой-то финт ушами, чтобы при major update всего этого добиться?
          Цитата kong83 @
          1. Несмотря на то, что я не меняю UpgradeCode и название продукта, меняю ProductionCode и увеличиваю версию - инсталляция не находит предыдущей версии и, соответственно, не удаляет её. Получается, что в Установке/Удалении программ накапливаются установленные разные версии моей программы.

          Проверь, правильно ли ты заполнил таблицу Upgrade и не забудь, что имя проперти нужно внести в SecureCustomProperties.
          Кроме того, в секвенция должно быть действие FindRelatedProducts.


          Цитата kong83 @
          2. От меня при установке требуют ввести заново все параметры, а этого хотелось бы избежать.
          Может быть есть какой-то финт ушами, чтобы при major update всего этого добиться?

          Я так понимаю, что это настройки твоей программы, которые хранятся либо на файловой системе, либо в реестре.
          Следовательно нужно сделать 2 вещи:
          1) при major update не удалять настройки (тут недавно был топик на эту тему)
          2) при major update не показывать диалоги, в которых надо вводить параметры.
            Я вроде справился со всеми трудностями, поджидавшими меня на тернистом пути обновления продукта. Осталась ещё одна сложность. Если первую версию установить в каталог не по умолчанию, а потом накатить major update - то он удалит старую версию правильно, но новую поставит в каталог по умолчанию.
            Не хотелось бы сохранять пути в реестр (как то это не круто выглядит). Может есть нормальный способ сделать так, чтобы новая версия ставилась в правильный каталог?
            Вот моя тестовая инсталляция. Может быть кто-нибудь подпишет то, чего ей не хватает?
            ExpandedWrap disabled
              <?xml version="1.0" encoding="utf-8"?>
              <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
                <?define ProductVersion="1.1.0.0" ?>
               
                <Product Id="{A7C22D25-C4F2-4d8f-80B6-0B0D1C14D87A}" Name="Test Product"
                         Language="1033"
                         Version="$(var.ProductVersion)"
                         Manufacturer="Confirmit"
                         UpgradeCode="{CC00BF47-7CBF-4bde-8FA1-905FA1916B1E}">
               
                  <Package InstallerVersion="200"
                           Description="Test installer"
                           Comments="Create table in database"
                           Compressed="yes" />
               
                  <Upgrade Id="{CC00BF47-7CBF-4bde-8FA1-905FA1916B1E}">
                    <UpgradeVersion Minimum="$(var.ProductVersion)" IncludeMinimum="no" OnlyDetect="yes" Language="1033"
                                    Property="NEWPRODUCTFOUND" />
               
                    <UpgradeVersion Minimum="1.0.0.0" IncludeMinimum="yes" Maximum="$(var.ProductVersion)" IncludeMaximum="no" Language="1033"
                                    Property="UPGRADEFOUND" />
                  </Upgrade>
               
                  <Property Id="NEWPRODUCTFOUND" Secure="yes" />
                  <Property Id="UPGRADEFOUND" Secure="yes" />
               
                  <Media Id="1" Cabinet="wixproj.cab" EmbedCab="yes" />
               
                  <Directory Id="TARGETDIR" Name="SourceDir">      
                    <Directory Id="ProgramFilesFolder">
                      <Directory Id="INSTALLLOCATION" Name="Test Product Location">
               
                        <Component Id='RemoveFiles' Guid='{DA838355-C9B3-4e02-8E9B-B91A0E39C79C}' DiskId='1' Feature='Complete'>
                          <Condition><![CDATA[NOT UPGRADINGPRODUCTCODE]]></Condition>
                          <RemoveFile Id='Remove_Web.config' Name='Web.config' On='uninstall' />
                        </Component>
                        
                        <Component Id="Component1" Guid="{9A1E9BCC-A730-40a7-9DBA-3D6424732978}" DiskId="1" Permanent="yes" Feature="Complete">
                          <Condition><![CDATA[NOT UPGRADEFOUND]]></Condition>
                          <File Id="FirstDetailsFeature_File1" Name="Web.config" Source="WebCP.config" />
                        </Component>
               
                        <Component Id="Component2" Guid="{0BD1FDD9-7AC5-4042-803C-9CF3741BAC4D}" DiskId="1" Feature="Complete">
                          <File Id="FirstFeature_File1" Name="File.txt" Source="WebCP.config" />
                        </Component>
                        
                      </Directory>
                    </Directory>
                  </Directory>
               
                  <Feature Id="Complete" Title="Complete" Description="Complete package" Level="1" Display="expand"
                           ConfigurableDirectory="INSTALLLOCATION" >
                  </Feature>
               
                  <UIRef Id="WixUI" />
                  <UIRef Id="WixUI_ErrorProgressText" />
               
                  <!-- Prevent downgrading -->
                  <CustomAction Id="PreventDowngrading" Error="Newer version already installed." />
               
                  <!-- Sequences -->
                  <InstallExecuteSequence>
                    <Custom Action="PreventDowngrading" After="FindRelatedProducts">NEWPRODUCTFOUND</Custom>
                    <RemoveExistingProducts After="InstallFinalize" />
                  </InstallExecuteSequence>
               
                  <InstallUISequence>
                    <Custom Action="PreventDowngrading" After="FindRelatedProducts">NEWPRODUCTFOUND</Custom>
                  </InstallUISequence>
               
                </Product>
              </Wix>

            Для того, чтобы накатить major update надо увеличить версию и изменить {A7C22D25-C4F2-4d8f-80B6-0B0D1C14D87A} на другой гуид.
            Ещё можно изменить
            ExpandedWrap disabled
              <Component Id="Component2" Guid="{0BD1FDD9-7AC5-4042-803C-9CF3741BAC4D}" DiskId="1" Feature="Complete">
                <File Id="FirstFeature_File1" Name="File.txt" Source="WebCP.config" />
              </Component>

            на
            ExpandedWrap disabled
              <Component Id="Component2" Guid="{0BD1FDD9-7AC5-4042-123C-9CF3741BAC4D}" DiskId="1" Feature="Complete">
                <File Id="FirstFeature_File1" Name="NewFile.txt" Source="WebCP.config" />
              </Component>

            И поменять содержимое файла WebCP.config. После обновления файл File.txt заменится на NewFile.txt. А Web.config останется неизменным. А при деинсталляции все файлы будут удалены.
            Честно говоря, не знаю, насколько такой подход верен. Но работает.
            Если будут замечания, готов обсудить.
              Неужто никто не сталкивался с major update, когда установка по умолчанию изменена?
              Может быть можно каким-нибудь стандартным способом получить пути установки от предыдущей инсталляции?
                В совсем старом инсталлере мы сохраняли путь в реестре.
                В более новом у нас был самописный bootstrapper, который контролировал весь процесс установки и апгрейда. (вобщем-то MSI только файлы копировал :) )
                В совсем новом либо все работает, либо никто не тестировал :D
                  Такая же проблема,

                  Удаляет он из InstallDir (D:\tst_install)
                  Ставит по умолчанию в C:\ProgramFiles\tst_install

                  Побороть пока не вышло - может подскажете пожалуйста?
                    Цитата Karayo @
                    Такая же проблема,

                    Удаляет он из InstallDir (D:\tst_install)
                    Ставит по умолчанию в C:\ProgramFiles\tst_install

                    Побороть пока не вышло - может подскажете пожалуйста?

                    Cходу на ум пришло только сохранять директорию, куда была установлена программа в конфиг, а при вызове апдейтера устанавливать ее с помощью CustomAction, забирая строку из конфига.
                      Спасибо!
                      Попробую - как что выйдет отпишусь.
                        Цитата seryal @
                        ExpandedWrap disabled
                          A minor upgrade can be used to add new features and components but cannot reorganize the feature-component tree.

                        а если мне нужно поменять директорию компонент, это будет рассмотрено как reorganize the feature-component tree? Мне нужно положить файл на один уровень глубже, т.е. например, файл копировался в директорию installlocation, а теперь нужно, чтоб он лежал в installlocation\x64? Благодарю
                        1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                        0 пользователей:


                        Рейтинг@Mail.ru
                        [ Script execution time: 0,0280 ]   [ 14 queries used ]   [ Generated: 20.05.24, 18:44 GMT ]