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


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

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



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


Выразить свое отношение к модераторам раздела можно здесь: Profi, Fester
Модераторы: Fester
  
> Удаление нескольких программ одновременно , Install Shield
    Нужен совет, сама я чего-то недопонимаю. Ситуация: есть Программа А и Программа Б, Б ставится только поверх А, но при этом она необязательна, поэтому для них отдельные инсталляшки. Я хочу сделать, чтобы при удалении А, автоматически удалялась Б. Сначала проверяю наличие установки Б в системе, потом вызываю custom action с условием REMOVE="ALL" и Б_ЕСТЬ="YES", в котором пытаюсь удалить Б - "msiexec.exe /x{GUID_B} /qn". Однако, программа не удаляется, в логах этот CA - skipped. Как заставить сработать удаление?
      Я бы сказал, что у тебя неправильно выставлено условие :) Посмотри в логах, действительно ли REMOVE="ALL" и Б_ЕСТЬ="YES" :)

      А вообще твой метод неочень хорош :)
      Дело в том, что в msi нельзя запустить две deferred фазы, следовательно кастом экшен должен быть immediate, а это приведет к тому, что инсталлер будет 2 раза запрашивать повышенные права :)
        Да, я уже столкнулась с тем, что он просил второй раз права.

        В результате я сделала так. По нажатию кнопки "Удалить" в последнем диалоге вызывается CA, который проверяет наличие программы Б и удаляет ее, т.е. все это происходит до InstallInitialize основного инсталлятора, при попытке ставить удаление Б после него была ошибка "Уже выполняется установка другого продукта. Повторите попытку позднее". При такой схеме второй раз права он не просит, однако на время задумывается на последнем диалоге. Не уверена, что это самое лучшее решение.

        Fester, а какой метод лучше применять в таких ситуациях? :)
          Цитата Spica @
          какой метод лучше применять в таких ситуациях?

          вариантов 3 :)
          1) испльзовать bootstrapper
          2) синхронизироваться через мутексы
          - запускается удаление А
          - делается deferred кастом экшен, который запускается перед InstallFinalize. Задачи: установить мутекс1 и запустить удаление Б
          - делается immediate кастом экшен (FreeMutex) в А (располагается после InstallFinalize). Задача - освободить мутекс1 и дождаться установки мутекс2.
          - делается immediate кастом экшен в А (располагается после FreeMutex). Задача - ждать освободнения мутекс2.

          - immediate кастом экшен в Б (где-то перед InstallInitialize). Задача - ждать освободнения мутекс1 и установить мутекс2.
          - immediate кастом экшен в Б (где-то после InstallFinalize). Задача - освободить мутекс2.
          удаление Б проводить в silent mode
          3) Windows Installer 4.5 умеет работать с nested installation, так что можно порыться в этом направлении. но тут тоже без кастом экшенов не получится.

          Самые простой способ - bootstrapper :)
          2-й вариант теоретически должен работать :) сам не пробовал ;)
          3-й вариант тоже не пробовал, но по идее должно работать. это пожалуй самый сложный вариант (придется перелопатить MSDN) + нужно будет устанавливать Windows Installer 4.5 в качестве пререквизита (опять же должен быть bootstrapper)
          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
          0 пользователей:


          Рейтинг@Mail.ru
          [ Script execution time: 0,0244 ]   [ 15 queries used ]   [ Generated: 10.05.24, 11:50 GMT ]