Уважаемые пользователи Голос!
Сайт доступен в режиме «чтение» до сентября 2020 года. Операции с токенами Golos, Cyber можно проводить, используя альтернативные клиенты или через эксплорер Cyberway. Подробности здесь: https://golos.io/@goloscore/operacii-s-tokenami-golos-cyber-1594822432061
С уважением, команда “Голос”
GOLOS
RU
EN
UA
zaguzin
7 лет назад

Разработка инсталляторов. Урок 12. Advanced Installer: Обнаружение и остановка процессов и служб, а также добавление лога прогресса установки.

Добрый вечер всем моим подписчикам и читателям. Сегодня мы с вами продолжим увеличивать функциональность нашего инсталлятора и усложнять себе жизнь. Итак, начнём.

1. Обнаружение и остановка процессов и служб.

Когда может это потребоваться? Например, многие из вас пользуются Skype и регулярно обновляют его. При обновлении программа закрывается, а после установки она опять запускается. Как вы знаете, заменить файл без остановки его работы в ОС нельзя, для начала нужно завершить этот процесс. Сегодня мы это и будем делать. Но перед тем, чтобы что-то останавливать, нужно сначала что-то найти.

Запускаем наш проект Program, с которым мы и работаем всё это время или содаём новый. Заходим во вкладку "Настраиваемые действия" и ищем параметр Detect Process. Чуть ниже мы видим также Detect Service - с ним можно поступить аналогично, если хотите обнаружить службу. Щёлкаем пару раз по Detect Process и пишем там имя нашего процесса. В данном случае это будет Program.exe. Также запоминаем, что у нас появилось свойство AI_PROCESS_STATE, оно нам потребуется обязательно.

После этого давайте создадим окно, которое покажет нам при установке, что процесс выполняется и попросит разрешение его остановить. Это не обязательно делать, но всё же лучше уведомить пользователя об этом, а не закрывать процесс автоматически.(Кстати, упомянутый Skype делает это сам, без вопросов). Находим там-же параметр Display Message Box и парой щелчков мышью добавляем его туда-же. Пишем название окна и сообщение для пользователя. Выбираем, какие кнопки будут отображены в нашем окне (Я выбрал "Да" и "Нет"), а также вывод свойства (BTN_PRESSED) - оно нам потребуется далее. Внизу в условиях заполняем указанное выше условие AI_PROCESS_STATE= "Running". 

Теперь нужно создать действие по остановке процесса. Выбираем Terminate Process. И добавляем его так же, как и два действия выше. В настройках действия пишем естественно Program.exe, а в условии прописываем BTN_PRESSED = "IDYES" ("IDYES" - это идентификатор кнопки "Да"). 

Теперь вы наверное поняли, что нам требуется правильно расположить наши добавленные действия. Как нам подсказывает логика:

1. Сначала мы определяем запущенный процесс.

2. Открываем окно с предупреждением о запущеном приложении и просим разрешить его остановку.

3. Останавливаем этот процесс.

4. Соответственно, всё это нужно сделать до установки файлов. Так что перетаскивает эти действия до выполнения собственно установки прораммы, в этап мастера:

Теперь мы можем собрать проект и проверить. 

Запустим нашу программу после сборки и одновременно с ней попробуем её и установить.

Как видим, всё получилось как мы и хотели. С сервисами мы можем поступить почти аналогично

Только параметр для окна запроса завершения у нас будет AI_SERVICE_STATE = "Started". Меняем также вывод свойства, например на BTN_PRESSED_1, так как обычный BTN_PRESSED у нас уже используется в установщике.

А условие для запуска остановки нужно будет изменить на BTN_PRESSED_1 = "IDYES" по аналогии.

Далее всё будет похоже. Так как у нас "не настоящая служба", а придуманная из другого исполняемого файла, то протестировать мы не может. Но всё должно работать. Если не будет - пишите, будем разбираться.

2. Отображение лога установки вашей программы.

Во вчерашней статье я упоминал, что в используемой нами теме "Весна" мы видим только шкалу прогресса установки программы, но не видим лог, то есть что и куда копируется. Давайте попробуем это исправить. Для этого заходим в "Диалоговые окна" и выбираем диалог прогресса установки (ProgressDlg). Удаляем всё лишнее, кроме собственно шкалы прогресса, а её убираем  вверх или вниз. Некоторые свойства будут скрыты (как видно на скриншоте), так что щёлкайте по окну и ищите их, а после удаляйте (иначе они нам могут помешать).

Теперь добавим туда "Поле ввода".

Растянем поле, как нам нужно. В его свойствах включим режим только для чтения, вертикальную прокрутку и многострочный атрибут.

Теперь добавляем "Подписку на событие" для этого элемента. Отображение события выбираем "Отображение подробностей действия установки", а в атрибутах - "Текст".

Теперь заходим в настройки темы и проверяем, включен ли у нас "Расширенный пользовательский интерфейс".

Если всё ок, то выполняем сборку. После сборки запускаем установщик и проверяем.

Как видим, в окне у нас отображается лог прогресса установки. Также мы видим, что с файлами со вчерашнего урока, которые у нас загружаются с сервера и распаковываются, всё нормально. Весь прогресс в скриншот не поместился, но думаю что вам стало понятнее, как и что происходит.

На этом у меня на сегодня всё. Всем спасибо за внимание и поддержку. До завтра!

143
125.650 GOLOS
На Golos с February 2017
Комментарии (1)
Сортировать по:
Сначала старые