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


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

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



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


Выразить свое отношение к модераторам раздела можно здесь: Profi, Fester
Модераторы: Fester
  
> WiX 3.8 как отобразить значение свойства в диалоге
    Здравствуйте, столкнулся со следующей проблемой.

    Пишу инсталлятор на WiX 3.8
    Есть Custom Action который выполняется после окончания установок сервисов. Выполняет ряд проверок и результат выводит в диалог
    Он вызывается так:

    ExpandedWrap disabled
      <CustomAction Id="CheckAction"
                        BinaryKey="CustomActions.CA.dll"
                        DllEntry="Check"
                        Execute="immediate"
                        Impersonate="no"/>
          <Binary Id="CustomActions.CA.dll" SourceFile="..\CustomActions\bin\$(var.Configuration)\CustomActions.CA.dll" />
          
          <InstallExecuteSequence>
            <Custom Action="CheckAction" After="InstallFinalize" >NOT Installed</Custom>
          </InstallExecuteSequence>


    В коде Custom Action он на C# я записываю значение свойства

    ExpandedWrap disabled
         session["TEST"] = "TestValue";


    для отображения в диалоге

    ExpandedWrap disabled
         <Control Id="TextId" Type="Text" X="255" Y="75" Width="80" Height="15" Property="TEST" Text="[TEST]" />


    При отладке в Custom Action попадаю, ошибок нет. В лог файле есть запись PROPERTY CHANGE: Adding TEST property. Its value is 'TestValue'.
    Однако при загрузке диалога ничего не отображается. Как с этим бороться?

    Если Custom Action вызывать из <InstallUISequence> то значение записывается и отображается, но <InstallUISequence> нельзя запланировать After="InstallFinalize".
      Цитата narita @
      но <InstallUISequence> нельзя запланировать After="InstallFinalize".

      но никто же на запретит тебе сделать свой финальный диалог (sequence == -1) ;)
        Не понял. Не могли бы вы поподробней написать как вытащить значение свойств?
        Экшен тяжелый выполняется несколько минут, поместив его в <InstallExecuteSequence> он запускается сразу после запуска сервисов, и вываливает в статус то, что сейчас делает. После этого появляется финальный диалог. Ему поставить sequence == -1 ?

        Если вызов экшена поместить в диалог и привязать к кнопке Install
        ExpandedWrap disabled
              <InstallUISequence>
                <Custom Action="CheckAction" After="InstallFinalize" >NOT Installed</Custom>
              </InstallUISequence>

        я получаю ошибку
        ..\MvmServerInstaller\MyVerifyReadyDlg.wxs(23): error LGHT0094: Unresolved reference to symbol 'WixAction:InstallUISequence/InstallFinalize' in section 'Fragment:'.

        Добавлено
        Да, еще хочу уточнить, мы один и тот же sequence имеем ввиду?
        Мой финальный диалог.
        ExpandedWrap disabled
          <Publish Dialog="MyExitDialog" Control="Finish" Event="EndDialog" Value="Return" Order="999">-1</Publish>
          Цитата narita @
          Не могли бы вы поподробней написать как вытащить значение свойств?

          Насколько я понимаю, значение свойств ты и так вытаскиваешь :) Так что тут мои пояснения не нужны :)


          Цитата narita @
          Экшен тяжелый выполняется несколько минут, поместив его в <InstallExecuteSequence> он запускается сразу после запуска сервисов, и вываливает в статус то, что сейчас делает.

          Ну вот и чудненько. Пусть там и остается :yes: Единственное что стоит подумать immediate это кастом экшен или таки deferred, но это ты, судя по всему, уже решил :)

          Цитата narita @
          После этого появляется финальный диалог. Ему поставить sequence == -1 ?

          Финальный диалог уже существует и его sequence уже -1 :) Этот диалог встраивается виксом автоматически. Но ты можешь либо заменить этот диалог на свой, либо видоизменить виксовый диалог.
          Если будешь заменять встроенный виксовый диалог, то у тебя будет что-то вроде такого:
          ExpandedWrap disabled
            <InstallUISequence>
                 <Show Dialog="MyExitDialog" OnExit="success" />
            </InstallUISequence>



          Цитата narita @
          Да, еще хочу уточнить, мы один и тот же sequence имеем ввиду?

          В InstallUISequence есть только одна колонка sequence :D
            У меня переписан финальный диалог. На него добавлено несколько контролов типа текст, в них я хочу увидить что записалось в свойства, когда выполнялся CustomAction.
            Печаль в том, что когда появляется финальный диалог ничего не отображается.
            Пробовал добавить ему кнопку Далее, и вывести их на следующем диалоге, но тоже безрезультатно.

            Добавлено
            и да, если добавить к

            ExpandedWrap disabled
              <InstallUISequence>
                     <Show Dialog="MyExitDialog" OnExit="success" Overridable="yes" Sequence="-1"/>
              </InstallUISequence>


            сначала ругается на конфликт OnExit и Sequence
            MyExitDialog.wxs(44): error CNDL0071: The sequence number for a Show element can be specified at most once, with either a 'Sequence' or 'OnExit' attribute, but not both.

            потом ругается на отрицательное значение в Sequence
            MyExitDialog.wxs(44): error CNDL0123: The Show/@Sequence attribute's value, '-1', is not in the range of legal values. Legal values for this attribute are from 1 to 32767.
              Цитата narita @
              Печаль в том, что когда появляется финальный диалог ничего не отображается.

              хмм.... странно... я надеюсь все твои устанавливаемые проперти public?
              попробуй добавить их в SecureCustomProperties.
              Если не поможет, то объяви их в Property table.

              В конце инсталляции в логе пишется список пропертей. Там есть устанавливаемые тобой проперти?

              Добавлено
              Цитата narita @
              и да, если добавить к

              убери
              ExpandedWrap disabled
                Sequence="-1"


              Цитата narita @
              The sequence number for a Show element can be specified at most once, with either a 'Sequence' or 'OnExit' attribute, but not both.

              Номер в очереди для элемента Show может быть установлен только один раз либо аттрибутом 'Sequence' либо 'OnExit', но не обоими.

              Цитата narita @
              The Show/@Sequence attribute's value, '-1', is not in the range of legal values. Legal values for this attribute are from 1 to 32767.

              Значение атрибута Sequence должно быть положительным.
                Спасибо за то, что уделяете мне время :)

                Цитата Fester @
                хмм.... странно... я надеюсь все твои устанавливаемые проперти public?

                Заглавными буквами при добавлении значения
                ExpandedWrap disabled
                  session["TEST"] = "TestValue";

                и при добывани
                ExpandedWrap disabled
                  <Control Id="TextId" Type="Text" X="255" Y="75" Width="80" Height="15" Text="[TEST]" />


                Цитата Fester @
                попробуй добавить их в SecureCustomProperties.

                добавляю так
                ExpandedWrap disabled
                  <Wix>
                   <Fragment>
                          <UI>
                            <Property Id="TEST" Secure="yes" ></Property>
                              <Dialog Id="MyExitDialog" Width="370" Height="270" Title="!(loc.ExitDialog_Title)">
                               ...
                   
                               <Control Id="TextId" Type="Text" X="255" Y="75" Width="80" Height="15" Text="[TEST]" />
                               </Dialog>
                   
                              <InstallUISequence>
                                  <Show Dialog="MyExitDialog" OnExit="success" Overridable="yes" />
                              </InstallUISequence>
                   
                              <AdminUISequence>
                                  <Show Dialog="MyExitDialog" OnExit="success" Overridable="yes" />
                              </AdminUISequence>
                          </UI>
                      </Fragment>
                  </Wix>

                не помогло ( Пробовал объявлять их в Product.wxs, тоже не помогло.

                Цитата Fester @
                Если не поможет, то объяви их в Property table.

                ExpandedWrap disabled
                  <SetProperty Id="TEST" Before="CheckAction" Value="TT" Sequence='execute'></SetProperty>

                так правильно делать?

                вот лог
                Действие закончено 13:32:09: InstallFinalize. Код возврата 1.
                MSI (s) (F4:28) [13:32:09:472]: Doing action: SetTEST
                MSI (s) (F4:28) [13:32:09:472]: Note: 1: 2205 2: 3: ActionText
                Действие 13:32:09: SetTEST.
                Начало действия 13:32:09: SetSTEST.
                MSI (s) (F4:28) [13:32:09:479]: PROPERTY CHANGE: Adding TEST property. Its value is 'TT'.
                Действие закончено 13:32:09: SetTEST. Код возврата 1.

                после чего это значение было перезаписано из CustomAction
                MSI (s) (F4!68) [13:32:15:398]: PROPERTY CHANGE: Modifying TEST property. Its current value is 'TT'. Its new value: 'Пройдено'.

                ну и в результате всего вывалило список всех пропертей, в том числе и наше
                Property(S): TEST = Пройдено

                В диалоге попрежнему пусто, почему-то не вываливает в него :(
                  Цитата narita @
                  Пробовал объявлять их в Product.wxs, тоже не помогло.

                  так:
                  <Property Id="TEST" Secure="yes" />
                  ?

                  Для добавления в Property table:
                  <Property Id="TEST" Secure="yes" Value="Не пройдено" />


                  Цитата narita @
                  так правильно делать?

                  Это ты делаешь кастом экшен. Это не то :)


                  Кстати, если ты вместо [TEST] подставить, скажем, [ProductName], то показывается?
                    Цитата Fester @
                    так:
                    <Property Id="TEST" Secure="yes" />
                    ?


                    да, так. ничего не выходило.

                    объявляем в property table
                    <Property Id="ISANYFILESCOMING" Secure="yes" Value="c"></Property>
                    вот лог
                    MSI (s) (F4!74) [15:02:34:770]: PROPERTY CHANGE: Modifying ISANYFILESCOMING property. Its current value is 'c'. Its new value: 'Не Пройдено'.

                    в диалоге выводит "с". Я пробовал добавлять это свойство на несколько страниц, с переключением далее - оно не меняется, остается 'c'.


                    Цитата Fester @
                    Кстати, если ты вместо [TEST] подставить, скажем, [ProductName], то показывается?

                    да, выводит реальный ProductName
                      Почему-то значения записаные в свойства во время инсталляции сохраняют старые значения при чтении их после установки..
                        А есть ли какой-нибудь другой способ вывести текст в диалог из CustomAction?
                          http://windows-installer-xml-wix-toolset.6...-td7228066.html

                          Насколько я понял нельзя получить значения свойств, которые записаны в CustomAction, вызванном из <InstallExecuteSequence> после InstallFinalize.
                          Поэтому после установки сервсов надо вешать экшн на кнопку и вызывать в <InstallUISequence> и ждать.., тогда в следующем диалоге можно будет увидеть заполненные результатами свойства.
                          Либо выполнять экшн в <InstallExecuteSequence> а по окончанию установок открывать заполненный текстовый файл.
                          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                          0 пользователей:


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