Näillä ohjeilla voit julkaista sovelluksesi eli tehdä siitä version, joka voidaan suorittaa myös koneella, jossa ei ole Qt:ta.
.\windeployqt6 "C:\qt_projects\myapp\build\release\myapp.exe"Jossa mainittu polku osoittaa siihen kansioon, jossa sovelluksesi exe-file sijaitsee.
Edellisessä esimerkissä on se vika, että sovelluksen julkaisijan tulee toimittaa koko kansio. Inno Setup sovelluksen avulla voidaan luoda yksi tiedosto, jonka avulla sovellus voidaan asentaa Windows koneelle.
Tämä ohje opastaa Qt Widget -sovelluksen asennuspaketin luomisessa Inno Setup -työkalulla.
Lataa ja asenna Inno Setup https://jrsoftware.org/isdl.php
Seuraavassa esimerkissä teen luomastani MyWeather Qt Widget sovelluksesta asennustiedoston. Tein asennuksesta videon Setupin luominen
Ennen asennuspaketin luomista sovellus täytyy kääntää Release-tilassa:
Tämän jälkeen build kansiosta löytyy myweather.exe tiedosto.
Qt-sovellukset tarvitsevat mukaan useita DLL-tiedostoja ja resursseja. Qt:n mukana tuleva windeployqt
työkalu kerää nämä automaattisesti.
Avaa komentokehote build kansioon ja suorita:
c:\Qt\6.9.1\mingw_64\bin\windeployqt.exe myweather.exe
Tämä komento kopioi kaikki tarvittavat Qt DLL-tiedostot, pluginit ja resurssit samaan kansioon sovelluksen kanssa.
windeployqt --release myweather.exeLuo tiedosto myweather.iss projektin juureen
; myweather Setup Script for Inno Setup
; Requires Inno Setup 6.0 or later
#define MyAppName "My Weather"
#define MyAppVersion "0.1"
#define MyAppPublisher "Your Name/Company"
#define MyAppExeName "myweather.exe"
#define MyAppURL "https://yourwebsite.com"
[Setup]
; Perusasetukset
AppId={{YOUR-UNIQUE-GUID-HERE}}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={autopf}\{#MyAppName}
DefaultGroupName={#MyAppName}
DisableProgramGroupPage=yes
LicenseFile=
InfoBeforeFile=
InfoAfterFile=
OutputDir=output
OutputBaseFilename=MyWeatherSetup
SetupIconFile=
Compression=lzma
SolidCompression=yes
WizardStyle=modern
PrivilegesRequired=admin
; Kieliasetukset
ShowLanguageDialog=auto
[Languages]
Name: "finnish"; MessagesFile: "compiler:Languages\Finnish.isl"
Name: "english"; MessagesFile: "compiler:Default.isl"
[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
[Files]
; Pääohjelma ja kaikki riippuvuudet
Source: "build\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
[Icons]
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}"
Name: "{autodesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon
[Run]
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#MyAppName}}"; Flags: nowait postinstall skipifsilent
[Code]
// Tarkista että .NET Framework tai muut riippuvuudet on asennettu
function InitializeSetup(): Boolean;
begin
Result := True;
end;
Korvaa {YOUR-UNIQUE-GUID-HERE} uniikilla GUID:lla. Voit luoda sen esim. PowerShellissä:
[guid]::NewGuid().ToString().ToUpper()
Tai online-työkalulla: https://www.guidgenerator.com/
Esimerkki: AppId={{A1B2C3D4-E5F6-7890-ABCD-EF1234567890}}
Jos haluat lisätä custom-ikonin:
.ico tiedosto (esim. app-icon.ico)SetupIconFile=myweather\app-icon.icoJos haluat näyttää lisenssin asennuksen aikana:
LICENSE.txt tiedostoLicenseFile=LICENSE.txtJos sovelluksesi tarvitsee konfiguraatiotiedostoja (esim. backend URL):
[Files]
Source: "myweather\config\*"; DestDir: "{app}\config"; Flags: ignoreversion
myweather.issoutput kansioon nimellä MyWeatherSetup.exe"C:\Program Files (x86)\Inno Setup 6\ISCC.exe" myweather.iss
Edellä mainitussa iss-tiedostossa määritettävä ikoni tulee asennusohjelmalle. Qt-sovelluksen ikoni voidaan määrittää seuraaavasti
IDI_ICON1 ICON "favicon.ico"
set(PROJECT_SOURCES
main.cpp
mainwindow.cpp
mainwindow.h
mainwindow.ui
appicon.rc
)
Sovellus tarvitsee seuraavat Qt-komponentit (windeployqt hoitaa nämä):
Jos sovelluksesi käyttää environment.h/cpp tiedostoja backend URL:n määrittämiseen, varmista että:
Setup-tiedoston koko on tyypillisesti 30-50 MB Qt-sovelluksille kaikkien riippuvuuksien kanssa.
Kun julkaiset uuden version:
#define MyAppVersion arvoaVoit automatisoida asennuspaketin luomisen ja julkaisun GitHub Actions -työkalulla. Seuraava workflow kääntää sovelluksesi, luo asennuspaketin ja julkaisee sen automaattisesti GitHub Releases -osiossa aina kun päivität release-branchin. Käyttäjät voivat sitten ladata ja asentaa sovelluksesi suoraan GitHubista.
Seuraavassa on esimerkki GitHub Action -workflow'sta. Esimerkissä käytetään Inno Setupia asennuspaketin luomiseen.
Luo GitHub-repositoriosi juureen kansio .github/workflows ja lisää sinne tiedosto
create-release.yml seuraavalla sisällöllä:
name: Create GitHub Release
on:
push:
branches: [ release ]
permissions:
contents: write
jobs:
build-and-release:
runs-on: windows-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Get version from CMakeLists.txt
id: get_version
run: |
$version = Select-String -Path "CMakeLists.txt" -Pattern 'project\(MyWeather VERSION ([0-9.]+)\)' | ForEach-Object { $_.Matches.Groups[1].Value }
if (-not $version) {
$version = "1.0.0"
}
echo "VERSION=$version" >> $env:GITHUB_OUTPUT
echo "Version: $version"
shell: pwsh
- name: Install Qt
uses: jurplel/install-qt-action@v4
with:
version: '6.9.1'
host: 'windows'
target: 'desktop'
arch: 'win64_msvc2022_64'
modules: 'qtnetworkauth'
- name: Configure CMake
run: |
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat"
cmake -B build -G "Ninja" -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="${{ env.QT_ROOT_DIR }}"
shell: cmd
- name: Build
run: |
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat"
cmake --build build
shell: cmd
- name: Deploy Qt dependencies
run: windeployqt build/MyWeather.exe --release
- name: Install Inno Setup
run: |
choco install innosetup -y
refreshenv
- name: Create installer
run: iscc MyWeather.iss
- name: Create GitHub Release
uses: softprops/action-gh-release@v1
with:
tag_name: v${{ steps.get_version.outputs.VERSION }}
name: MyWeather v${{ steps.get_version.outputs.VERSION }}
body: |
## MyWeather v${{ steps.get_version.outputs.VERSION }}
### Lataa asennusohjelma
Lataa MyWeatherSetup.exe alta ja suorita se asentaaksesi sovelluksen.
### Muutokset
- Automaattisesti luotu release release-branchista
files: |
output/MyWeatherSetup.exe
draft: false
prerelease: false
Sinun on ehkä tehtävä GitHubissa repon asetuksissa seuraavat määritykset:
Jos Qt-sovelluksesi ei ole repositorion juuressa vaan alikansiossa (esim. frontend), tee seuraavat muutokset workflow-tiedostoon:
Muuta Get version from CMakeLists.txt -vaiheen polku:
- name: Get version from CMakeLists.txt
id: get_version
run: |
$version = Select-String -Path "frontend/CMakeLists.txt" -Pattern 'project\(MyWeather VERSION ([0-9.]+)\)' | ForEach-Object { $_.Matches.Groups[1].Value }
if (-not $version) {
$version = "1.0.0"
}
echo "VERSION=$version" >> $env:GITHUB_OUTPUT
echo "Version: $version"
shell: pwsh
Lisää -S frontend parametri määrittämään lähdekansio:
- name: Configure CMake
run: |
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat"
cmake -S frontend -B build -G "Ninja" -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="${{ env.QT_ROOT_DIR }}"
shell: cmd
Muuta Inno Setup -tiedoston polku osoittamaan alikansioon:
- name: Create installer
run: iscc frontend/MyWeather.iss
Huom: Build-, Deploy Qt dependencies- ja muut vaiheet pysyvät ennallaan, koska build-kansio luodaan edelleen repositorion juureen.
Voit automatisoida asennuspaketin luomisen ja julkaisun webpalvelimellesi GitHub Actions -työkalulla. Seuraava esimerkki näyttää kuinka luodaan workflow, joka kääntää Qt-sovelluksesi, luo asennuspaketin ja siirtää sen automaattisesti webpalvelimellesi SCP:llä aina kun päivität main-branchin.
Tein videon GitHub Actionsin käytöstä Qt-sovelluksen julkaisuun: Qt-sovelluksen julkaisu GitHub Actionsilla
Luo GitHub-repositoriosi juureen kansio .github/workflows ja lisää sinne tiedosto
build-and-deploy.yml seuraavalla sisällöllä:
name: Build and Deploy MyWeather
on:
push:
branches: [ main ]
jobs:
build-and-deploy:
runs-on: windows-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Install Qt
uses: jurplel/install-qt-action@v4
with:
version: '6.9.1'
host: 'windows'
target: 'desktop'
arch: 'win64_msvc2022_64'
modules: 'qtnetworkauth'
- name: Configure CMake
run: |
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat"
cmake -B build -G "Ninja" -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="${{ env.QT_ROOT_DIR }}"
shell: cmd
- name: Build
run: |
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat"
cmake --build build
shell: cmd
- name: Deploy Qt dependencies
run: windeployqt build/MyWeather.exe --release
- name: Install Inno Setup
run: |
choco install innosetup -y
refreshenv
- name: Create installer
run: iscc MyWeather.iss
- name: Deploy to web server via SCP
uses: appleboy/scp-action@v0.1.7
with:
host: ${{ secrets.WEB_SERVER_HOST }}
username: ${{ secrets.WEB_SERVER_USER }}
key: ${{ secrets.WEB_SERVER_SSH_KEY }}
port: 22
source: "output/MyWeatherSetup.exe"
target: ${{ secrets.WEB_SERVER_PATH }}
GitHub Secrets -muuttujat: Yllä olevassa esimerkissä käytetään secrets.WEB_SERVER_HOST, secrets.WEB_SERVER_USER jne. muuttujia. Näitä käytetään turvallisuussyistä - SSH-avaimia ja palvelimen tietoja ei saa koskaan kirjoittaa suoraan workflow-tiedostoon, koska ne näkyisivät julkisesti GitHubissa. GitHub Secrets tallentaa nämä salattuina.
Jotta saat edellisen toimimaan, sinun tulee määrittää SSH-avaimesi ja web-palvelimen tiedot GitHub Secrets -asetuksiin oheisen ohjeen mukaisesti: GitHub Secrets