Introduction
Après une nouvelle période d’absence (été, projets), je reprends les jours R&D pour la rentrée ! Premier sujet de cette nouvelle: générer un installeur windows pour une application Electron.
Premiers pas
Electron Installer
Après une rapide recherche, je suis tombé sur plusieurs articles qui pointaient vers le même projet : electron-winstaller donc je pense que je vais regarder par là. Première chose : le projet utilise Squirrel. Mais c’est quoi donc Squirrel ?
Squirrel
Le titre du projet est assez évocateur : “Squirrel, It’s like ClickOne but Works” … Le but est de créer des installeur pour windows (IOs aussi). Le projet et sa documentation cible très clairement les applications .Net et utilise le système de package associé “NuGet”. Le système propose des mécanismes de mises à jour en arrière plan ce qui peut-être pratique !
J’essaye !
Package
Le projet utilisé pour test est une reprise et j’avais oublié qu’il n’avait pas de package … donc il faut commencer par remettre en place la possibilité de packager car c’est un prérequis
- Installation du packager:
npm install -g electron-packager
, - Version Linux :
electron-packager . teamweather --platform=linux --arch=x64 --out=release-builds --prune=true --overwrite
- Version Windows :
electron-packager . teamweather --platform=win32 --arch=x64 --out=release-builds --prune=true --overwrite
Le package ne pose aucun souci … pas une erreur rien. C’est louche mais ca marche
Installer
Script
La documentation décrit le code qu’il faut utiliser. Personnellement, j’ai suivi le conseil d’un des articles et j’ai externalisé le code dans une commande. Voici le code (qui est très proche de celui présent dans les articles …) :
// Dépendandes
const createWindowsInstaller = require('electron-winstaller').createWindowsInstaller
const path = require('path')
// Appel de la fonction
getInstallerConfig()
.then(createWindowsInstaller)
.catch((error) => {
console.error(error.message || error)
process.exit(1)
})
// La fonction de build
function getInstallerConfig () {
// un petit log
console.log('creating windows installer')
// Point de départ
const rootPath = path.join('./')
// Sortie
const outPath = path.join(rootPath, 'release-builds')
// Action !!!
return Promise.resolve({
appDirectory: path.join(outPath, 'teamweather-win32-x64/'), // Là où est la version packagé
authors: 'TeamWeather Team', // L'auteur
noMsi: true,
outputDirectory: path.join(outPath, 'windows-installer'), // Là où sera déposé le package
exe: 'teamweather.exe', // l'exec
setupExe: 'TeamWeatherAppInstaller.exe' // le nom du setup
})
}
Pour builder, il suffit alors de lancer la commande : node installers/windows/createinstaller.js
Build
Alors … comment dire que j’ai galéré. En même temps, c’est ma faute : j’étais sous Linux pour un installer Windows. J’ai essayé d’installer des éléments manquants (Mono) mais c’était jamais la bonne version ou je prennais le risque de casser ma distrib. Totale, je suis passer sous Windows et 5 minutes c’était réglé … : npm install --save-dev electron-winstaller node installers/windows/createinstaller.js
Voilà !
Actions avant / après
Comme indiqué dans la documentation, il est possible de réaliser des commandes en mode “installation/désinstallation”. Par exemple, après l’installation, enregistrer une clé de registre. Je n’ai pas eu le temps de pousser cette partie en raison des soucis de build mais le principe est assez simple
.
Suite à une action “setup”, l’executable principale est appelée avec un paramètre du type ‘–squirrel-install’. Il faut donc détecter le paramètre et réaliser les actions que l’on souhaite en fonction du paramètre. Voici deux exemples :
case '--squirrel-install':
case '--squirrel-updated':
// Ajout d'un raccourci
spawnUpdate(['--createShortcut', exeName]);
setTimeout(app.quit, 1000);
return true;
case '--squirrel-uninstall':
// Suppression du raccourci
spawnUpdate(['--removeShortcut', exeName]);
setTimeout(app.quit, 1000);
return true;
Un point important : il faut que les traitements soient rapides ! En effet, Squirrel car couper l’application au bout d’une seconde … Pas le temps de traîner !
Bilan
J’ai bien un installer mais j’ai pu regarder les mises à jour … J’aurais pas du insister à vouloir builder un package windows sous linux … Ce sera pour un autre demain.
Liens
Quelques liens :
- Electron Installer
- Squirrel.Windows
- Electron Windows installer tutorial
- Electron packager tutorial
- How to create a windows installer for an application built with Electron Framework
- How to create a windows installer for an application built with Electron Framework
- Electron Installer Usage
- Development with Electron: Episode 15 - Building an Installer on Windows
- Electron Packager API