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. Tämä vaatii hieman lisäkonfiguraatiota GitHub-repositoriossasi. Seuraavan esimerkin avulla voit luoda GitHub Actionin, joka kääntää Qt-sovelluksesi ja luo asennuspaketin aina, kun päivität päähaaraan (main branch). Esimerkissä käytetään Inno Setupia asennuspaketin luomiseen. Asennuspaketti viedään automaattisesti erilliselle web-palvelimelle SCP:llä SSH-yhteyden yli .
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
env:
SSH_KEY: ${{ secrets.WEB_SERVER_SSH_KEY }}
WEB_HOST: ${{ secrets.WEB_SERVER_HOST }}
WEB_USER: ${{ secrets.WEB_SERVER_USER }}
WEB_PATH: ${{ secrets.WEB_SERVER_PATH }}
run: |
# Save SSH key to file
printf '%s\n' "$SSH_KEY" > deploy_key
chmod 600 deploy_key
# Upload file
scp -i deploy_key -P 22 -o StrictHostKeyChecking=no output/MyWeatherSetup.exe "${WEB_USER}@${WEB_HOST}:${WEB_PATH}/"
# Cleanup
rm deploy_key
shell: bash
Jotta saat edellisen toimimaan, sinun tulee määrittää SSH-avaimesi ja web-palvelimen tiedot GitHub Secrets -asetuksiin oheisen ohjeen mukaisesti: GitHub Secrets
Voit myös julkaista Qt-sovelluksesi GitHubin kautta käyttämällä GitHub Releases -ominaisuutta.
Seuraavassa on esimerkki GitHub Action -workflow'sta, joka luo release-paketin ja lataa asennustiedoston GitHub Releases -osioon aina, kun päivität release branchin.
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
---
Luotu automaattisesti GitHub Actionsilla
files: |
output/MyWeatherSetup.exe
draft: false
prerelease: false
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
Sinun tulee kuitenkin tehdä GitHubissa repon asetuksissa seuraavat määritykset: