Русский
Русский
English
Статистика
Реклама

Django framework

Из песочницы Поднимаем Django стек на MS Windows

17.10.2020 06:09:54 | Автор: admin
image

В данной статье будет представлена подробная инструкция по установке и настройке программ Apache, Python и PostgreSQL для обеспечения работы Django проекта в ОС MS Windows. Django уже включает в себя упрощенный сервер разработки для локального тестирования кода, но для задач, связанных с продакшен, требуется более безопасный и мощный веб-сервер. Мы настроим mod_wsgi для взаимодействия с нашим проектом и настроим Apache в качестве шлюза в внешний мир.

Стоит отметить, что установка и настройка будет производиться в ОС MS Windows 10 с 32 разрядностью. Также 32 битная реакция будет универсальна и будет работать на 64 битной архитектуре. Если вам нужна 64 битная установка повторите те же действия для 64 битных дистрибутивов программ, последовательность действий будет идентична.

В качестве Django проекта будем использовать программу Severcart. Она предназначена для управления перемещениями картриджей, учёта печатающего оборудования и договоров поставки и обслуживания. Установка всех программ и модулей будет производиться в каталог C:\severcart. Местоположение не принципиально.

Python


Первым шагом является загрузка и установка Python с веб-сайта Python. Выбираем Windows в качестве операционной системы и 32-битную версию. На момент написания статьи текущей версией является 3.9.0rc2.

Загрузив файл установки, щелкните правой кнопкой мыши файл установки и выберите Запуск от имени администратора. Вы должны увидеть экран ниже



Устанавливаем галочки напротив чекбоксов Install launcher for add user (recomended) и Add Python 3.9 to PATH и нажимаем на Customize installation.



Устанавливаем галочки на против pip, py launcher, for all users (requires elevation) и нажимаем Next.



Выбираем все поля ввода как на картинке выше и нажимаем на Install.



Чтобы убедиться, что установка прошла успешно, откройте cmd и введите python. Если установка прошла успешно, вы должны увидеть приглашение, подобный приведенному ниже



Устанавливаем mod_wsgi


Скачиваем скомпилированный пакет с mod_wsgi c сайта
www.lfd.uci.edu/~gohlke/pythonlibs. Модуль выполняет функции посредника межу сервером Apache и Django проектом. Самый свежий пакет будет с именем mod_wsgi-4.7.1-cp39-cp39-win32.whl. Обратите внимание, что пакет скомпилирован для 32 битной Windows CPython версии 3.9. Также стоит отметить, что очевидная установка модуля pip install mod_wsgi скорее всего завершится ошибкой, т.к. в процессе установки потребуется компилятор Visual Studio C++. Ставить компилятор целиком ради одного Python пакета в Windows считаем нецелесообразным.

Устанавливаем модуль с помощью стандартного пакетного менеджера pip в cmd или powershell:

pip install -U mod_wsgi-4.7.1-cp39-cp39-win32.whl




Apache


Скачиваем дистрибутив с сайта https://www.apachelounge.com/download/.
Самая свежая версия Web-сервера является Apache 2.4.46 win32 VS16. Также для работы программы понадобиться заранее установленный пакет Visual C++ Redistributable for Visual Studio 2019 x86.

Распаковываем дистрибутив Apache в каталог C:\severcart\Apache24, далее меняем строку с номером 37 на свою

Define SRVROOT "C:/severcart/Apache24"


Проверяем работу Apache, выполнив в командной строке

C:/severcart/Apache24/bin> httpd.exe


В результате должны увидеть в браузере по адресу 127.0.0.1 строку It works!.



Устанавливаем службу Apache, для этого выполним в командной строке от имени Администратора инструкцию:

C:\severcart\Apache24\bin>httpd.exe -k install -n "Apache24"


Далее подключим модуль mod_wsgi к Apache. Для этого выполним в командной строке инструкцию
C:\Windows\system32>mod_wsgi-express module-config


В результате в стандартный вывод будет распечатаны строки:
LoadFile "c:/severcart/python/python39.dll"LoadModule wsgi_module "c:/severcart/python/lib/site-packages/mod_wsgi/server/mod_wsgi.cp39-win32.pyd"WSGIPythonHome "c:/severcart/python"


Создаем файл C:\severcart\Apache24\conf\extra\httpd-wsgi.conf и копипастим туда распечатанные строки выше.

Подключаем новую конфигурацию к основному файлу httpd.conf
Include conf/extra/httpd-wsgi.conf

Сохраняем изменения, перезагружаем службы Apache
Net stop Apache24Net start Apache24


PostgreSQL


Устанавливаем PostgreSQL взятый с сайта https://postgrespro.ru/windows. Текущая версия программного продукта 12. Преимущества Российского дистрибутива от канонического представлены на том же сайте.





















Действия по установке представлены выше и комментариях не нуждаются. Установка крайне проста.

Создаем БД в postgres, где потом будут храниться структуры данных Django проекта

C:\severcart\postgresql\bin>psql -h 127.0.0.1 -U postgres -WCREATE DATABASE severcart WITH ENCODING='UTF8' OWNER=postgres CONNECTION LIMIT=-1 template=template0;




БД создана. Теперь разворачиваем Django проект.

Устанавливаем web приложение


Для этого скачиваем zip архив с сайта https://www.severcart.ru/downloads/ и распаковываем в каталог C:\severcart\app\



Вносим изменения в главный конфигурационный файл C:\severcart\app\conf\settings_prod.py для указания реквизитов подключения к БД



Python словарь DATABASES содержит в себе реквизиты подключения к БД. Подробности по настройке читайте здесь https://docs.djangoproject.com/en/3.1/ref/databases/#connecting-to-the-database

Устанавливаем Python пакеты значимостей для работы приложений внутри Django проекта

C:\severcart\app\tkinstaller>python install.py




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

Подключаем Django приложение к серверу Apache для этого дополняем конфигурационный файл
httpd-wsgi.conf следующим текстом

Alias /static "c:/severcart/app/static"Alias /media "c:/severcart/app/media"<Directory "c:/severcart/app/static">    # for Apache 2.4    Options Indexes FollowSymLinks    AllowOverride None    Require all granted</Directory><Directory "c:/severcart/app/media">    # for Apache 2.4    Options Indexes FollowSymLinks    AllowOverride None    Require all granted</Directory>WSGIScriptAlias / "c:/severcart/app/conf/wsgi_prod.py"WSGIPythonPath "c:/severcart/python/"<Directory "c:/severcart/app/conf/"><Files wsgi_prod.py>    Require all granted</Files>   </Directory>

Перезагружаем службу Apache и проверяем работу приложения



На этом все. Спасибо что дочитали.

В следующей статье будем создавать установочный самораспаковывающийся архив в InnoSetup для быстрого развертывания Django проекта на компьютере заказчика.
Подробнее..
Категории: Python , Postgresql , Apache , Django , Django framework

Создаём установщик веб-приложения Python, включающий Apache, Django и PostgreSQL для ОС Windows

26.10.2020 08:23:53 | Автор: admin


Данный пост является продолжением первой части статьи на Хабре, где было подробно рассказано о развертывании Django стека на MS Windows. Далее будет представлена пошаговая инструкция по созданию инсталлятора, который будет автоматизировать процесс установки стека на других компьютерах без необходимости работы в командной строке, созданием виртуальных машин и т.д., где вся последовательность действий будет сводится к действиям Далее -> Далее -> Готово.

Итак, что должен делать инсталлятор:

  1. Распаковать все необходимые программы и компоненты в указанную пользователем директорию.
  2. Выполнить проверки перед установкой.
  3. Прописать интерпретатор Python в реестре Windows.
  4. Установить, если ещё не установлены, программные библиотеки зависимостей.
  5. Создать службы Apache и PostgreSQL, затем стартовать их.
  6. Дополнительным плюсом будет автоматическое создание программы деинсталлятора, который удалит установленный стек, если пользователь этого захочет.


Среди возможных вариантов установщиков выберем бесплатный установщик Inno Setup, т.к. он позволяет выполнить все вышеуказанные действия, позволяющее создавать установщики без необходимости выполнять много сценариев. По сравнению с программой Wix синтаксис установочного файла имеет формат ini, легче читать и менять, чем xml. Сегодня конкурирует и даже превосходит многие коммерческие установщики по набору функций и стабильности.

Лучше всего то, что для создания базового установщика вообще не требуется никаких сценариев, поскольку Inno Setup поставляется с графическим мастером, который на удивление хорошо справляется с базовыми установщиками.

Логика установки может быть написана на ЯП Pascal, а не на запутанных пользовательских действиях в Wix. Единственным недостатком его является то, что он создает только exe, формат файлов msi не поддерживается.

Шаг 1. Установка Inno Setup



Дополнительные комментарии здесь не нужны, т.к. скачивание и установка программы инсталлятора тривиальна.

Шаг 2: Создание сценария установки Inno Setup



Создадим заготовку сценария установки Inno Setup (файл *.iss) с помощью Мастера сценариев установки.

























В результате будет создан *.iss файл с следующим содержимым:
; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

#define MyAppName "Severcart"
#define MyAppVersion "1.21.0"
#define MyAppPublisher "Severcart Inc."
#define MyAppURL "https://www.severcart.ru/"

[Setup]
; NOTE: The value of AppId uniquely identifies this application. Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{4FAF87DC-4DBD-42CE-A2A2-B6D559E76BDC}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName=c:\severcart
DefaultGroupName={#MyAppName}
; Uncomment the following line to run in non administrative install mode (install for current user only.)
;PrivilegesRequired=lowest
OutputDir=C:\Users\Developer\Desktop\Output
OutputBaseFilename=mysetup
Compression=lzma
SolidCompression=yes
WizardStyle=modern

[Languages]
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"

[Files]
Source: "C:\severcart\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
; NOTE: Don't use "Flags: ignoreversion" on any shared system files




Шаг 3. Проверки перед установкой



Перед распаковкой программ в каталог и изменения в реестре необходимо проверить, что TCP порты свободны для работы Apache и PostgreSQL, также нужно проверить минимальные системные требования ОС Windows, т.к. как уже оговаривалось в Первой части данной статьи устанавливаемая версия Python будет работать только начиная с версии MS Windows 8 (версия ядра 6.2).

Для выполнения необходимых проверок воспользуемся секцией [Code] установочного файла. Раздел [Code] это необязательный раздел, определяющий сценарий Pascal. Сценарий Pascal можно использовать для настройки установки или удаления разными способами. Обратите внимание, что создать сценарий Pascal непросто и требует опыта работы с Inno Setup и умений программирования на Pascal или, по крайней мере, на аналогичном языке программирования.

function IsWindowsVersionOrNewer(Major, Minor: Integer): Boolean;
var
Version: TWindowsVersion;
begin
GetWindowsVersionEx(Version);
Result := (Version.Major > Major) or ((Version.Major = Major) and (Version.Minor >= Minor));
end;

function IsWindows8OrNewer: Boolean;
begin
Result := IsWindowsVersionOrNewer(6, 2);
end;


Для проверки доступности TCP портов создадим следующую функцию:

function CheckPortOccupied(Port:String):Boolean;
var
ResultCode: Integer;
begin
Exec(ExpandConstant('{cmd}'), '/C netstat -na | findstr'+' /C:":'+Port+' "', '',0,ewWaitUntilTerminated, ResultCode);
if ResultCode <> 1 then
begin
Log('this port('+Port+') is occupied');
Result := True;
end else
begin
Result := False;
end;
end;


Вызывать проверочные функции будем в функции InitializeSetup, вызываемой во время инициализации установки. Возвращает False, для отмены установки, в противном случае True.

function InitializeSetup(): Boolean;
var
port_80_check, port_5432_check: boolean;
begin
if not IsWindows8OrNewer() then begin
MsgBox('Установка невозможна. Программа работает начиная с Windows 2012 и Windows 8.0.',mbError,MB_OK);
Abort();
Result := False;
end;

port_80_check := CheckPortOccupied('8080');
if port_80_check then begin
MsgBox('Установка невозможна. TCP порт 8080 занят.',mbError,MB_OK);
Abort();
Result := False;
end;

port_5432_check := CheckPortOccupied('5432');
if port_5432_check then begin
MsgBox('Установка невозможна. TCP порт 5432 занят.',mbError,MB_OK);
Result := False;
Abort();
end;
Result := True;


Шаг 4. Прописываем Python в реестре Windows



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

Для этого добавляем ключи PYTHONPATH, PYTHONHOME и обновляем переменную Path.

sys.path содержит список строк, предоставляющих места поиска модулей и пакетов будущего Python проекта. Он инициализируется из переменной среды PYTHONPATH и другими настройками.

PYTHONHOME домашний каталог Python.

PATH это переменная окружения, которая ОС использует для поиска исполняемых файлов в командной строке или окне терминала.

[Registry]

Root: HKLM; Subkey: "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"; \
ValueType: expandsz; ValueName: "Path"; ValueData: "{olddata};{app}\python;{app}\python\Scripts"

Root: HKLM; Subkey: "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"; \
ValueType: expandsz; ValueName: "PYTHONPATH"; ValueData: "{app}\python"

Root: HKLM; Subkey: "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"; \
ValueType: expandsz; ValueName: "PYTHONHOME"; ValueData: "{app}\python"



Шаг 5. Создаем конфигурационные файлы служб Apache и PostgreSQL



Для создания конфигурационных файлов воспользуемся 2я Python скриптами, которые сгенерируют конфигурационные на основе заданного пользователем пути установки.

Вызов скриптов будет производиться в разделе [Run] установщика.

Раздел [Run] является необязательным и указывает любое количество программ, которые необходимо выполнить после успешной установки программы, но до того, как программа установки отобразит последнее диалоговое окно.

Далее в эту же секцию добавим скрытую установку распространяемые пакеты Visual Studio без которых службы Apache и PostgreSQL работать не будут.

[Run]

Filename: "{app}\common\VC_redist.x86apache.exe"; Parameters: "/install /passive"; Flags: waituntilterminated
Filename: "{app}\common\vcredist_x86pg.exe"; Parameters: "/install /passive"; Flags: runhidden;
Filename: "{app}\python\python.exe" ;Parameters: "{app}\common\create_http_conf.py"; Flags: runhidden
Filename: "{app}\python\python.exe" ;Parameters: "{app}\common\edit_pg_conf.py"; Flags: runhidden
Filename: "{app}\common\install.bat";Flags: runhidden
Filename: "{app}\common\services_start.bat"; Flags: runhidden


Содержимое файла create_http_conf.py

#!/usr/bin/env python3# -*- coding:utf-8 -*-import sys, osbase_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))base_path_un = base_path.replace('\\', '/')apache_conf_path = os.path.join(base_path, 'Apache24', 'conf', 'extra', 'httpd-wsgi.conf')print('base_path=',base_path)CONF = """LoadFile "%(base)s/python/python39.dll"LoadModule wsgi_module "%(base)s/python/lib/site-packages/mod_wsgi/server/mod_wsgi.cp39-win32.pyd"WSGIPythonHome "%(base)s/python"Alias /static "%(base)s/app/static"Alias /media "%(base)s/app/media"<Directory "%(base)s/app/static">    # for Apache 2.4    Options Indexes FollowSymLinks    AllowOverride None    Require all granted</Directory><Directory "%(base)s/app/media">    # for Apache 2.4    Options Indexes FollowSymLinks    AllowOverride None    Require all granted</Directory>WSGIScriptAlias / "%(base)s/app/conf/wsgi_prod.py"WSGIPythonPath "%(base)s/python/"<Directory "%(base)s/app/conf/"><Files wsgi_prod.py>    Require all granted</Files>   </Directory>"""conf_content = CONF % {'base': base_path_un}with open(apache_conf_path, 'w') as fp:    fp.write(conf_content)# Read in the fileapache_main = os.path.join(base_path, 'Apache24', 'conf', 'httpd.conf')with open(apache_main, 'r') as file :filedata = file.read()# Replace the target stringreplace_pattern = 'Define SRVROOT "%(base)s/Apache24"' % {'base' : base_path_un}find_pattern = 'Define SRVROOT "C:/severcart/Apache24"'filedata = filedata.replace(find_pattern, replace_pattern)# Write the file out againwith open(apache_main, 'w') as file:file.write(filedata)


Содержимое edit_pg_conf.py

#!/usr/bin/env python3# -*- coding:utf-8 -*-import sys, os"""c:/djangostack/postgresql/bin/postgres.exe "-D" "c:\djangostack\postgresql\data""""base_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))base_path_un = base_path.replace('\\', '/')pg_conf_path = os.path.join(base_path, 'postgresql', 'data', 'postmaster.opts')# Read in the filepg_conf_path = os.path.join(base_path, 'postgresql', 'data', 'postmaster.opts')with open(pg_conf_path, 'r') as file :filedata = file.read()# Replace the target stringreplace_pattern = base_path_un + '/'find_pattern = "C:/severcart/"filedata = filedata.replace(find_pattern, replace_pattern)# Write the file out againwith open(pg_conf_path, 'w') as file:file.write(filedata)


Содержимое файла install.bat

@echo off

..\Apache24\bin\httpd.exe -k install -n "Apache" > install.log 2>&1

..\postgresql\bin\pg_ctl.exe register -N "PostgreSQL" -D ..\postgresql\data > install.log 2>&1


Содержимое файла services_start.bat

@echo off

net start "Apache"

net start "PostgreSQL"


Шаг 6: Создаем деинсталлятор



Для любого инсталлятора также необходимо предусмотреть возможность создания программы деинсталлятора. К счастью программа Inno Setup сделает эту работу за нас, за исключением некоторых действий, которые нужно предусмотреть для очистки следов присутствия программы в ОС.

Для этого в секции [UninstallRun] пропишем выполнение bat скрипта Windows для остановки установленных служб, а также их удаления.

[UninstallRun]
Filename: "{app}\common\remove.bat"; Flags: runhidden


Содержимое bat скрипта:

@echo off

SC STOP Apache
SC STOP PostgreSQL

SC DELETE Apache
SC DELETE PostgreSQL

Скрипт выполняет остановку служб, затем удаляет службы Apache и PostgreSQL из перечня системных служб Windows.

Шаг 7. Подписание исполняемого файла инсталлятора ЭП разработчика



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

Купить сертификат разработчика PFX, например можно здесь. Сертификат приобретается на год.

Предпоследним шагом над работы с инсталлятором будет автоматический запуск программы signtool.exe для подписания готового инсталлятора в формате exe после того как программа Inno Setup завершит свою работу. SignTool это программа командной строки, которая подписывает файлы цифровой подписью, проверяет подписи в файлах и временные метки файлов. По умолчанию в комплекте поставки Windows программа signtool.exe отсутствует, поэтому скачиваем и устанавливаем Windows 10 SDK.

По окончании установки вы найдете signtool.exe в каталогах:

  • x86 -> c:\Program Files (x86)\Windows Kits\10\bin\x86\
  • x64 -> c:\Program Files (x86)\Windows Kits\10\bin\x64\


Для тех, кто хочет познакомиться с программой подписания подробнее посетите официальный сайт разработчика. В нем перечислены все опции командной строки и примеры использования. Двигаемся далее.

Далее настроим автоматическое подписание файла. Выбираем Configure Sign Tools... из меню Tools.



Далее нажимаем на кнопку Add



Дадим инструменту имя. Это имя, которое вы будете использовать при обращении к инструменту в сценариях установщика. Я назвал свой signtool, потому что использую signtool.exe.



Вставьте текст, который вы используете для подписи исполняемых файлов из командной строки. Замените имя подписываемого файла на $f. Inno Setup заменит переменную $f подписываемым файлом.

C:\Program Files (x86)\Windows Kits\10\bin\x86\signtool.exe sign /f C:\MY_CODE_SIGNING.PFX /t timestamp.comodoca.com/authenticode /p MY_PASSWORD $f



После нажатия OK вы закончите настройку инструмента подписи.



Добавим следующий сценарий в раздел [Setup], чтобы использовать только что настроенный инструмент подписи. Это предполагает, что вы назвали свой инструмент signtool.

SignTool=signtool


Шаг 8. Собираем инсталлятор



Итоговый InnoSetup файл инсталлятора
#define MyAppName Severcart
#define MyAppVersion 1.21.0
#define MyAppPublisher Severcart Inc.
#define MyAppURL www.severcart.ru

[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
SignTool=signtool
AppId={{2CF113D5-B49D-47EF-B85F-AE06EB0E78EB}}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName=c:\severcart
DefaultGroupName={#MyAppName}
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes
ChangesEnvironment=yes

; Uninstall options
Uninstallable=yes
CreateUninstallRegKey=yes
;WizardSmallImageFile=logo3.bmp

[Icons]
Name: "{userdesktop}\severcart"; Filename: 127.0.0.1:8080/

[Languages]
Name: russian; MessagesFile: compiler:Languages\Russian.isl

[Files]
Source: C:\severcart\*; Excludes: "*.pyc"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs

[Registry]
Root: HKLM; Subkey: SYSTEM\CurrentControlSet\Control\Session Manager\Environment; \
ValueType: expandsz; ValueName: Path; ValueData: "{olddata};{app}\python;{app}\python\Scripts"

Root: HKLM; Subkey: SYSTEM\CurrentControlSet\Control\Session Manager\Environment; \
ValueType: expandsz; ValueName: PYTHONPATH; ValueData: "{app}\python"

Root: HKLM; Subkey: SYSTEM\CurrentControlSet\Control\Session Manager\Environment; \
ValueType: expandsz; ValueName: PYTHONHOME; ValueData: "{app}\python"

[Run]
Filename: "{app}\common\VC_redist.x86apache"; Parameters: "/install /passive"; Flags: waituntilterminated
Filename: "{app}\common\vcredist_x86pg"; Parameters: "/install /passive"; Flags: runhidden;
Filename: "{app}\python\python.exe" ;Parameters: "{app}\common\create_http_conf.py"; Flags: runhidden
Filename: "{app}\python\python.exe" ;Parameters: "{app}\common\edit_pg_conf.py"; Flags: runhidden
Filename: "{app}\common\install.bat";Flags: runhidden
Filename: "{app}\common\services_start.bat"; Flags: runhidden


[UninstallRun]
Filename: "{app}\common\remove.bat"; Flags: runhidden

[Code]
function IsWindowsVersionOrNewer(Major, Minor: Integer): Boolean;
var
Version: TWindowsVersion;
begin
GetWindowsVersionEx(Version);
Result :=
(Version.Major > Major) or
((Version.Major = Major) and (Version.Minor >= Minor));
end;

function IsWindows8OrNewer: Boolean;
begin
Result := IsWindowsVersionOrNewer(6, 2);
end;

function CheckPortOccupied(Port:String):Boolean;
var
ResultCode: Integer;
begin
Exec(ExpandConstant('{cmd}'), '/C netstat -na | findstr'+' /C:":'+Port+' "', '',0,ewWaitUntilTerminated, ResultCode);
if ResultCode <> 1 then
begin
Log('this port('+Port+') is occupied');
Result := True;
end else
begin
Result := False;
end;
end;

function InitializeSetup(): Boolean;
var
port_80_check, port_5432_check: boolean;
begin
if not IsWindows8OrNewer() then begin
MsgBox('Установка невозможна. Программа работает начиная с Windows 2012 и Windows 8.0.',mbError,MB_OK);
Abort();
Result := False;
end;

port_80_check := CheckPortOccupied('8080');
if port_80_check then begin
MsgBox('Установка невозможна. TCP порт 8080 занят.',mbError,MB_OK);
Abort();
Result := False;
end;

port_5432_check := CheckPortOccupied('5432');
if port_5432_check then begin
MsgBox('Установка невозможна. TCP порт 5432 занят.',mbError,MB_OK);
Result := False;
Abort();
end;
Result := True;

end;






Шаг 9. Проверяем работу инсталлятора





















На это всё, спасибо за внимание. Собранные дистрибутивы для ОС Windows можно скачать на сайте https://www.severcart.ru/downloads/.
Подробнее..
Категории: Python , Postgresql , Apache , Pascal , Django framework

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru