Разпространение за Windows

Страницата е създадена на:15 април 2019 и редактирана на:18 май 2019

Библиотеките от Qt, както и други библиотеки, използвани при създаване на софтуер, се интегрират в крайния продукт по един от два начина: статичен или динамичен.

При статичния модел функциите от използваните библиотеки се вмъкват в изпълнимите файлове на създавания софтуер, докато при динамичния модел те се предоставят като отделни файлове - библиотеки заедно с изпълнимите файлове на приложението. Статичният модел изисква Qt да е компилирана предварително със зададено предпочитание за този модел, но Qt системата, ако се изтегля и инсталира наготово, а не се компилира на място от програмиста, който я ползва, е предвидена за създаване на продукти с динамичен модел за разпространение. Това означава, че за да може ваш програмен продукт, направен с Qt, да работи и на компютър, на който не е инсталирана специално Qt, то Вие трябва заедно със своя продукт да предоставени и файловете с библиотеките от Qt , които той ползва.

По-простият начин за създаване на комплект от необходими файлове, за стартиране на, направена с Qt програма за Windows, е заедно с генерирания при компилирането .exe файл, в същата директория да поставите и необходимите библиотеки - .dll файлове. За копиране на тези файлове има специално програма windeployqt.exe, която се намира в bin директорията на инсталацията на Qt и се изпълнява от командния промпт. За да се изпълнява тази програма, при изписване само на нейното име, трябва в path променливата на обкръжението да е добавена bin директорията на Qt. Програмата windeployq.exe изисква един параметър – директорията, в която се намира .exe файла на Вашата програма. Например, ако .exe файла на Вашата, компилирана Qt програма, се намира в текущата директория, подайте команда:

windeployqt .

Обърнете внимание на точката, тя задава на windeployq да обработи текущата директория.

След тази команда, архивирайте всички файлове и директории, създадени в текущата директория, и предайте направения архивен файл на Вашите потребители. При разархивиране на този файл, дори и на компютър, на който няма Qt, при стартиране на .exe файла, той следва да стартира успешно без съобщения за липсващи библиотеки.

Създаване на инсталатор на проект за Windows

След като сте написали своя програма и сте решили да започнете да я разпространявате, добре е максимално да облекчите потребителите, като създадете инсталиращ файл, който да осигури правилно разполагане в компютъра на потребителя на всички файлове, използвани от Вашата програма.

Теория и инструменти

В Windows действията по инсталиране, деинсталиране или обновяване на програмите се извършват от системата Windows Installer. Информация за Windows Installer може да намерите на страницата:

https://msdn.microsoft.com/en-us/library/cc185688.aspx

За да извърши всички необходими действия по инсталиране, деинсталиране или обновяване на програмите Windows Installer използва инсталационни пакети под формата на .msi файлове.

Важни понятия за разбиране работата на Windows Installer са понятията за модули (features) и компоненти (components). Модулите са самостоятелни съвкупности от по-малки части на една програма, за които на потребителя по време на инсталирането, се дава възможност да избере дали да ги инсталира или не.

Компонентите (components) са съвкупности от различни части, които винаги се инсталират или деинсталират заедно. Делението на програмата на компоненти обикновено остава скрито за потребителя. Модулите се състоят от различни комбинации от компоненти като е възможно една компонента да влиза в състава на два или повече модула. Работа на програмиста е да реши как ще раздели програмата си на модули и компоненти. Една най-проста програма може да се състои само от един главен модул, който включва само от една компонента.

 

WiX e комплект от инструменти за създаване на инсталационни пакети за Windows. За да използвате WiX за създаване на инсталационен пакет е необходимо във файл с XML формат и разширение .wxs да опишете състоянието на системата, което ще се установи след извършване на инсталацията – какви нови файлове, в кои директории ще се запишат, какви нови записи в регистъра да се създадат, какви икони и т.н. Схемата на структурата на тези файлове е описана в помощния файл docWiX.chm, който пристига с продукта. Иначе WiX се състои от конзолни програми представляващи предпроцесор, компилатор, свързваща програма и декомпилатор. С тези инструменти, последователно от .wxs файловете и файловете на вашата програма се създават инсталационни пакети (.msi или .msm файлове).

От сайта wix.sourceforge.net може да се изтегли версия 3.10.3 на WiX във вид на .msi инсталатор или на .zip файл, съдържащ двоичните изпълними файлове. Аз лично предпочитам да използвам .zip файла.

Учебник за работа с WiX има на адрес: https://www.firegiant.com/wix/tutorial/ .

 

WixEdit е удобна програма с визуален интерфейс, с която може да се създават .wxs изходни файлове, а също така и да се компилират чрез инструментите от WiX до инсталационни пакети. Сайтът, на WixEdit wixedit.sourceforge.net. Аз предпочитам да тегля .zip файла с двоични изпълними файлове.

Създаване на инсталационен пакет с WixEdit

Настройване на WixEdit

Ако сте изтеглили, като мен, .zip файла с WixEdit, след като го разархивирате в някоя директория, влезте в нейната поддиректория build и щракнете двойно върху файла WixEdit.exe за да стартирате WixEdit. При първото стартиране ще се покаже съобщение за грешка, защото трябва да се направят някои настройки. След като се покаже главния прозорец на WixEdit изберете от манюто: Tools -> Options. Щракнете еднократно за да се маркира реда "WiX Binaries Directory". Щракнете бутона "..." вдясно на този ред и посочете директорията, в която се намират изпълнимите файлове на WiX. По същия начин, ако имате любим текстов редактор, който предпочитате пред notepad, посочете него в реда: "External XML Editor".

За да проверите правилността на настройката, затворете WixEdit и го отворете отново. Ако настройката е правилна няма да се покаже съобщение за грешка.

Създаване на изходен файл за нов инсталационен пакет

Стартирайте WixEdit и изберете от менюто: File -> New. Отваря се диалогов прозорец Create new WiX file

Щракнете бутона "Brows" за да посочите директория, в която ще се намират файловете на новия инсталационен пакет. Добра идея е това да бъде някоя поддиректория на Вашата програма, която ще се инсталира с този пакет.

В полето "Enter WiX Project Name" напишете име за инсталационния пакет на Вашата програма.

Щракнете бутона OK. Показва се диалогов прозорец Product Properties, в който трябва да попълните задължителните параметри за инсталиране на Вашия програмен продукт (Product).

ID е глобален уникален идентификатор (GUID), по който системата Windows Installer ще разпознава Вашата програма. Можете да поставите в това поле символа *, което ще кара WiX при всяко компилиране на инсталационния пакет да генерира автоматично нов идентификатор, или може да щракнете бутона "..." вдясно, който ще генерира постоянен идентификатор. Поставянето на * не е препоръчително, защото тогава Windows Installer ще възприема всяка нова компилация на инсталационния пакет, като отнасяща се за съвсем различен продукт и в резултат - всяка нова инсталация от такъв пакет ще се добавя отново в списъка с програми в Control Panel.

Повече за глобалните уникални идентификатори може да научите от страницата:

en.wikipedia.org/wiki/Globally_Unique_Identifier

Language е номера на езика, на който ще се показват съобщения по време на инсталиране на програмата. Българският език е с номер 1026, а номерата на другите езици са посочени на страницата:

microsoft.com/globaldev/reference/lcid-all.mspx

Manufacturer е създателя на програмата. Може да посочите своето име или фирма.

Name е името на програмата, под което тя ще се показва, например, в Control Panel и на други места в системата.

Version е версията. Може да посочите нещо подобно, например, на 2.10.55, т.е. до три числа, разделени с точки.

След като попълните задължителните параметри в диалоговия прозорец щракнете "Done" бутона. Зададените параметри се показват в дясното поле на WixEdit.

Към показваните в дясното бяло поле параметри може да добавяте нови. Добавяне на нови параметри става чрез щракване на десния бутон на мишката в дясното поле и избиране на New - показва се списък, от който може да се избират параметри за добавяне.

Ако сте решили Вашия инсталационен пакет да показва съобщенията си на български и сте задали на Language стойност 1026, то трябва да добавите и параметър Codpage и да му зададете стойност 1251 - това е номера на кодовата страница за кирилица. Ако не посочите Codpage вместо български букви ще се показват въпросителни.

Друг задължителен параметър за инсталиране на програма е UpgradeCode. UpgradeCode e глобален уникален идентификатор (DUID) и се генерира с помощта на "..." бутона, вдясно на полето за стойността му.

Още задължителни елементи за описване инсталирането на една програма са Media и Package. Тези елементи се добавят чрез щракване с десния бутон на мишката в лявото бяло поле върху "Product" и избиране от изскачащото меню New->.

За да добавите елемента Media изберете от изскачащото меню: New -> Media.

В полето ID на "Media" напишете 1. В дясното поле с параметрите на Media чрез щракване с десния бутон на мишката добавете параметър Cabinet. На параметъра Cabinet задайте име за .cab файл, например: product.cab. Добавете и параметъра EmbedCab и от падащия списък срещу него изберете "yes".

За да добавите и елемента Package, в лявото бяло поле, в което виждате надписа "Product", щракнете върху този надпис с десния бутон на мишката и изберете New -> Package.

Ако Вашия инсталационен пакет ще показва надписи на български трябва и на елемента Package да зададете параметрите, съответстващи на българския език: Languages и SummaryCodpage. Добавете тези параметри и им задайте стойности Languages = 1026 и SummaryCodpage = 1251.

Добавете и параметъра Compressed, и от падащия списък срещу него изберете "yes", както и параметъра InstallerVersion, на който задайте стойност 150.

С това вече сте създали празен инсталатор за Вашата програма, който може да се компилира до .msi файл. Съхранете го с File -> Save

Компилиране на инсталационен пакет

За да компилирате Вашия изходен .wxs файл до .msi файл, изберете от менюто:

Build -> Build MSI Setup Package

Ако .wxs файла е съставен правилно, компилирането завършва с надпис: "Finished in: xx seconds", а ако съдържа грешки с: "Error in candle" или "Error in light". След успешно завършване на компилацията в същата директория с .wxs файла се появяват .msi файл със същото име. Ако щракнете двойно с мишката върху този .msi файл започва инсталирането на Вашата програма. Разбира се, ако сте извършили само горните действия и инсталатора е все още празен, няма да бъде инсталирано нищо, само ще се покаже един празен прозорец със заглавие, съвпадащо с параметъра Name, който сте задали.

Добавяне на директории

При инсталиране, файловете от Вашата програма се разполагат в нови или съществуващи вече директории. За да създадете инсталационен пакет, Вие трябва да опишете кои са тези директории и кои файлове да бъдат копирани във всяка от тях. Описаните в изходния .wxs файл на Вашия инсталационен пакет директории се виждат в WixEdit, когато се щракне с мишката върху иконата "Files", намираща се в колонката с икони, разположени вляво на прозореца на WixEdit. Ако сте следвали само указанията от Създаване на изходен файл за нов инсталационен пакет, щракването върху иконата "Files" показва празен прозорец.

Описването на директориите и файловете от Вашата програма започва със създаване описание на една, всъщност, реално несъществуваща, главна директория. За да създадете това описание щракнете с десния бутон на мишката в празното поле "Files" и изберете New - Directory. Срещу свойството ID, задайте TARGETDIR. Това променя надписа Directory на TARGETDIR. В полето със свойството ID щракнете десния бутон на мишката и изберете New. От списъка, който се показва изберете Name и срещу новодобавеното свойство Name напишете SourceDir. Надписа в лявото поле сега отново се променя от TARGETDIR на SourceDir.

Нека да обърна внимание на разликата между параметрите ID и Name на директориите. ID е "вътрешен", уникален идентификатор на директорията, който се използва от WiX при описание на инсталационния процес. Name е "истинското" име на директорията, с което тя се вижда в системата, например, в Windows explorer. В ID не може да се използват символи като интервал, тире и др. Освен това, "истинските" имена на директориите могат и да бъдат еднакви, ако те са поддиректории в различни други директории. Идентификаторите обаче в описанието на един инсталационен пакет трябва да бъдат уникални. Във всички случаи е необходимо да се задават и ID, и Name параметрите. Тази забележка се отнася и за други елементи, притежаващи параметри ID и Name - файлове, икони и др.

Широко разпространена практика е програмите в Windows да се разполагат в поддиректории на директорията Program Files и освен това много разработчици предпочитат да създават в тази директория една поддиректория за всичките си продукти и в нея поддиректории за всеки отделен продукт. За да се постигне нещо подобно с WixEdit първо трябва да се посочи директорията Program Files. Щракнете с десния бутон на мишката върху надписа "SourceDir" и изберете New -> Directory. Срещу свойството ID на новата директория напишете ProgramFilesFolder. Това е името под което системата Windows Installer разпознава директорията Program Files. Имената на други стандартни директории в Windows, с които те се разпознават от Windows Installer, са посочени на тази страница:

msdn2.microsoft.com/en-us/library/Aa372057.aspx

За да посочите поддиректория на Program Files, в която ще инсталирате различните Ваши програми, щракнете с десния бутон на мишката върху директорията ProgramFilesFolder и изберете New -> Directory. Срещу свойството ID на новата директория напишете, например, MyCompany.

За да добавите поддиректория за отделна програма в директорията MyCompany, щракнете върху нея с десния бутон на мишката, изберете New -> Directory и задайте ID на новата поддиректория INSTALLDIR, а Name задайте по Ваш избор, например MyProduct.

Директорията, която съответства на Desktop се задава с ID: DesktopFolder и Name: Desktop.

Директорията All Programs от старт менюто се задава с ID: ProgramMenuFolder и Name: StartProgram.

Добавяне на компоненти

Компонентите на практика се състоят от един или повече файлове, които се инсталират в една и съща директория, както и свързани с тези файлове икони, ключове в регистъра на Windows и др. След като сте задали някоя директория, в която ще се инсталира един или повече файлове, то трябва да зададете поне една компонента за тази директория. Щракнете с десния бутон на мишката върху името на директорията и изберете New -> Component. След като създадете компонента, щракнете върху свойството GUID и после вдясно върху бутона "…", за да бъде генериран уникален глобален идентификатор за компонентата. Напишете ID, което не съвпада с други идентификатори от инсталационния пакет. Всяка компонента трябва да участва поне в един модул, ето защо след като създадете компонента трябва да я добавите в някой модул. Вижте Добавяне на модули (Features).

Добавяне на модули (Features)

За да създадете модул щракнете върху иконата Files и после върху панела Features. В лявото поле щракнете с десния бутон на мишката и изберете New -> Feature. Срещу параметъра Lavel на новия модул напишете 1, а срещу ID - уникален идентификатор, който не съвпада с друг идентификатор от инсталационния пакет. За да добавите компонента в модула щракнете с десния бутон на мишката върху него и изберете New -> ComponentRef. От падащия списък срещу параметъра ID на добавената компонента изберете идентификатора на компонентата, която добавяте в модула.

Добавяне на файлове

За да добавите файлове към дадена компонента щракнете върху иконата "Files" и после върху панела "Files". Щракнете с десния бутон на мишката върху компонентата, в която ще добавите файлове, изберете Import Files и с помощта на диалоговия прозорец, който се показва, посочете файловете, които ще добавите. След като добавите файлове изтрийте параметъра ShortName на всеки файл, защото този параметър във версия 3.0 на WiX вече не се използва.

Добавяне на икони за стартиране

Щракнете иконата Resources и панела Icons. Щракнете в панела с десния бутон на мишката и изберете: Add File. Посочете файла, от който ще се използва икона.

Щракнете иконата Files и панела Files. В полето на този панел щракнете с десния бутон на мишката върху името на .exe файла, към който искате да създадете икона. Изберете New → Shortcut. Задайте параметрите ID и Name на иконата. Параметъра Name съвпада с надписа, с който ще се вижда иконата.

Добавете и задайте параметрите: Advertise със стойност yes. Directory – ID на директория, в която ще се намира иконата – Desktop или в Start менюто. Тази директория трябва да е добавена в проекта. (Вижте: Добавяне на директории.) WorkingDirectory – ID на директорията, която ще е текуща при стартиране на програмата. Icon – името на ресурсен файл, от който ще се вземе иконата. Ако този файл съдържа повече икони, задайте и IconIndex – номера на иконата.

 

Направено с MyCMS. Copyright CC BY-ND 4.0.