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


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

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



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


Выразить свое отношение к модераторам раздела можно здесь: Profi, Fester
Модераторы: Fester
Страницы: (5) « Первая ... 2 3 [4] 5  все  ( Перейти к последнему сообщению )  
> WIX Condition , Не срабатывает Condition
    Цитата Tatyana Druzenko @
    Вот кусочек из лога, получается кастом экшен выполнился?

    Зависит от того, как ты этот кастом экшен определила :)
    Если immediate, то да, выполнился. А если deferred, то еще не выполнился :)


    Цитата Tatyana Druzenko @
    Или вот эта строчка означает, что кастом экшен не выполнился?

    Это означает успешное (т.е. без ошибки) завершение работы кастом экшена.
    0 - это код ERROR_SUCCESS
      Я все написала, как в примере из статьи. Где происходит во это определение: immediate или deferred?
        Пределение происходит в элементе CustomAction. По умолчанию immediate.
        Значит твое действие выполнилось.

        Папка могла не создаться из-за того, что фаза immediate работает с пониженными правами запустившего пользователя, а для создания папки в Program Files нужна повышенные права.
        Обработки ошибок в скрипте нет, поэтому ничего не произошло.

        Ради теста можешь определить это действие как deferred и перенеси его до InstallFinalize (т.к. deferred custom actions могут располагаться только межно InstallInitialize и InstallFinalize)



        Однако это только для теста :) Тебе надо immediate и менять в статус компонент в зависимости от условий :)
          Я попробовала просто руками как обычно создать папку в Program Files - получилось. Значит дело не в правах?


          Вы говорите, что обработки ошибки в скрипте нет, а что же означает вот эта строчка:

          On Error Resume Next


          Можно ли писать код в CustomAction не на vbscript, а на C# например? С обычными if-else?
            Цитата Tatyana Druzenko @
            Вы говорите, что обработки ошибки в скрипте нет, а что же означает вот эта строчка:

            Не знаю :) Я vbscript не понимаю :D



            Можно и на C#: Creating WiX Custom Actions in C# and Passing Parameters
            Я кастом экшены делаю на С++.
              Я что-то запуталась в C# и XML.

              Вот я написала:
              <Binary Id="CusAction.CA.dll" SourceFile="..\OpenSoft.InkRouter.ShedulerService.CustomAction\bin\$(var.Configuration)\OpenSoft.InkRouter.ShedulerService.CustomAction.CA.dll" />

              <CustomAction Id="ConfigUpgrade" Property="PRODUCT_V3_INSTALLED" Value="1" Return="check" Execute="immediate" BinaryKey="CusAction.CA.dll" DllEntry="ConfigUpgrade" />

              <InstallExecuteSequence>
              <Custom Action="ConfigUpgrade" Before="InstallFinalize" />
              </InstallExecuteSequence>

              В объявлении CustomAction хочу указать, что когда 3 версия установлена, то свойство PRODUCT_V3_INSTALLED = 1. И потом это использовать.

              И создала CustomAction. Пытаюсь написать условие, но как указать действие - устанавливать например?

              public class CustomActions
              {
              [CustomAction]
              public static ActionResult CustomAction1(Session session)
              {
              //session.Log("Begin CustomAction1");
              if (session["PRODUCT_V3_INSTALLED"].Equals(1))
              {
              ....
              }
              else { ... }
              return ActionResult.Success;
              }
              }
                Должно быть
                <CustomAction Id="ConfigUpgrade" Return="check" Execute="immediate" BinaryKey="CusAction.CA.dll" DllEntry="ConfigUpgrade" />


                Цитата Tatyana Druzenko @
                В объявлении CustomAction хочу указать, что когда 3 версия установлена, то свойство PRODUCT_V3_INSTALLED = 1. И потом это использовать.

                PRODUCT_V3_INSTALLED ты устанавливаешь когда ищешь установленные продукты.

                Цитата Tatyana Druzenko @
                И создала CustomAction. Пытаюсь написать условие, но как указать действие - устанавливать например?

                MsiSetComponentState function
                  Я прошла по ссылке, которую Вы мне дали, нотам нет ни одного примера :( Никак не разберусь, куда мне писать все эти INSTALLSTATE_* ...

                  if (INSTALLSTATE_ABSENT)
                  {
                  File.Create("SchedulerService.exe.config");

                  }
                  else { }

                  Так подчеркивает - нет такого свойства :( и все так же непонятно, что писать в фигурных скобках. То есть как на C# запустить действие - установку нужного файла, я вот нашла File.Create("SchedulerService.exe.config"), но что-то мне подсказывает, что это не установка данного файла.

                  Добавлено
                  И еще Вы мне посоветовали эту статью, но я не пойму, разве мне это нужно писать?

                  <Property Id="PRODUCTINSTALLFOLDER">
                  <RegistrySearch Id='ProductInstallDir'
                  Type='raw'
                  Root='HKLM'
                  Key='SOFTWARE\Manufacturer\ExistingProduct\Setup'
                  Name='MsiInstallPath'
                  Win64='yes'/>
                  </Property>

                  <CustomAction Id='AssignConfigFile'
                  Property='CONFIGFILE'
                  Value='[PRODUCTINSTALLFOLDER]pathtoconfigfile\web.config' />
                  <InstallExecuteSequence>
                  <Custom Action="AssignConfigFile" After="CostFinalize" />
                  <Custom Action="ConfigurEwsFilter" Before="InstallFinalize" />
                  </InstallExecuteSequence>


                  ....

                  session.Log("Session value for CONFIGFILE = '{0}'", session["CONFIGFILE"]);
                    Tatyana Druzenko, ты когда-нибудь программировала? :)
                      Конечно, а что не так?
                        Ну просто показалось, что нет ;)

                        File.Create("SchedulerService.exe.config"); - просто создает файл, тебе это не надо.
                        Тебе надо вызвать функцию MsiSetComponentState и установить iState в INSTALLSTATE_LOCAL.

                        вот кастом экшен, который, по идее :), всегда устанавливает компоненту "SchedulerService.exe.config".
                        ExpandedWrap disabled
                          extern "C" __declspec(dllexport) UINT  SetComponentState (MSIHANDLE hInstaller)
                          {
                              return MsiSetComponentState (hInstall, _T("SchedulerService.exe.config"), INSTALLSTATE_LOCAL);
                          }


                        тебе надо получить значения интересующих тебя пропертей и в зависимости от них требовать установки компоненты (ну или нет :)).
                        Для начала попробуй, работает ли это в принципе, потом уже можно будет финтить с условиями.
                        Сообщение отредактировано: Fester -
                          К сожалению у меня подчеркивается и MSIHANDLE, и MsiSetComponentState (hInstall, и INSTALLSTATE_LOCAL.
                          А в интернете я не могу найти, какой using надо написать. Можете подсказать?
                            Это на С++.

                            В принципе есть Microsoft.Deployment.WindowsInstaller, но это не "родная" библиотека, а какие-либо зависимости крайне нежелательны.
                              Эта библиотека подключена у меня, но компилятор все равно говорит, что не находит эти имена. Получается мне нужно удалять этот CustomAction и делать новый на C++? Аналога на c# нет? :(
                                Не уверен, но предположу, что в этой библиотеке эта функция называется InstallMissingComponent.
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


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