个性化阅读
专注于IT技术分析

如何为使用Electron Framework构建的应用程序创建Windows安装程序

本文概述

如果要创建而不是基于Squirrel的安装程序, 而要创建MSI(Microsoft安装程序)安装程序, 请改用本教程。

作为开发人员, 你可能知道Linux具有软件包管理器, 因此开发人员不需要”需要”安装程序。开发人员只需要为发行版提供一个软件包, 然后每个发行版都有一种安装此软件包的方式, 这种方式可以在终端(apt-get)中或通过图形界面(例如Ubuntu软件中心。但是, Windows不是Linux。

你不说

几乎所有安装程序都是由工具创建的(例如WiX, Nsis, Inno Setup等)。在本文中, 你将学习如何使用electronic-winstaller模块为Windows创建Windows安装程序, 该模块使用Squirrel(Windows桌面应用程序的安装和更新框架)。

1.准备工作区

而且, 这并不意味着你应该清洁计算机。为了使本教程易于理解, 我们将在桌面上创建一个名为” electron-workspace”的文件夹, 该文件夹将包含在一个文件夹中, 该文件夹包含你的Electron Project的源代码:

源代码工程电子

在这种情况下, 该文件夹将位于C:\ Users \ sdkca \ Desktop \ electron-workspace, 并且电子项目的源代码将位于其中(myapp-source)。

2.安装Electron winstaller模块

现在, 我们需要安装将有助于我们创建安装程序的模块, 在这种情况下, 我们将使用electron-winstaller。该NPM模块使用Squirrel为Electron应用程序构建Windows安装程序。启动NodeJS命令提示符, 然后使用导航到工作区(请注意, 模块需要安装在工作区中, 而不是项目中):

cd C:\Users\sdkca\Desktop\electron-workspace

然后使用以下命令安装模块:

npm install electron-winstaller

安装模块后, 我们的工作区现在将具有2个文件夹:

电子源代码文件夹和节点模块

3.管理桌面快捷方式(安装, 更新和卸载事件)

可以安装的应用程序, 但是一旦关闭, 便找不到可执行文件来启动它, 这是没有用的。因此, 我们将使用电子松鼠启动模块, 它将帮助你实现我们的目标。它处理最常见的命令, 例如管理桌面快捷方式(安装事件, 更新事件和卸载事件)。

该模块需要安装在项目内部, 而不是工作空间中, 因此请使用NodeJS命令提示符导航到Electron项目的源代码文件夹, 在这种情况下, 我们将使用:

cd C:\Users\sdkca\Desktop\electron-workspace\myapp-source

然后使用以下命令安装模块:

npm install electron-squirrel-startup

安装模块后, 我们需要用一些代码来指导我们要做什么。我们将添加一些代码, 尤其是在Electron Project的main.js文件中。在文件的开头(在声明应用变量之后), 添加以下几行:

// Module to control application life. (this variable should already exist)
const app = electron.app

// this should be placed at top of main.js to handle setup events quickly
if (handleSquirrelEvent(app)) {
    // squirrel event handled and app will exit in 1000ms, so don't do anything else
    return;
}

handleSquirrelEvent函数希望将app变量作为第一个参数, 可以将该函数添加到main.js文件的末尾:

注意

仅当应用程序在安装程序中时, 才会执行以下代码, 因此在你处理项目时不会执行此代码。

function handleSquirrelEvent(application) {
    if (process.argv.length === 1) {
        return false;
    }

    const ChildProcess = require('child_process');
    const path = require('path');

    const appFolder = path.resolve(process.execPath, '..');
    const rootAtomFolder = path.resolve(appFolder, '..');
    const updateDotExe = path.resolve(path.join(rootAtomFolder, 'Update.exe'));
    const exeName = path.basename(process.execPath);

    const spawn = function(command, args) {
        let spawnedProcess, error;

        try {
            spawnedProcess = ChildProcess.spawn(command, args, {
                detached: true
            });
        } catch (error) {}

        return spawnedProcess;
    };

    const spawnUpdate = function(args) {
        return spawn(updateDotExe, args);
    };

    const squirrelEvent = process.argv[1];
    switch (squirrelEvent) {
        case '--squirrel-install':
        case '--squirrel-updated':
            // Optionally do things such as:
            // - Add your .exe to the PATH
            // - Write to the registry for things like file associations and
            //   explorer context menus

            // Install desktop and start menu shortcuts
            spawnUpdate(['--createShortcut', exeName]);

            setTimeout(application.quit, 1000);
            return true;

        case '--squirrel-uninstall':
            // Undo anything you did in the --squirrel-install and
            // --squirrel-updated handlers

            // Remove desktop and start menu shortcuts
            spawnUpdate(['--removeShortcut', exeName]);

            setTimeout(application.quit, 1000);
            return true;

        case '--squirrel-obsolete':
            // This is called on the outgoing version of your app before
            // we update to the new version - it's the opposite of
            // --squirrel-updated

            application.quit();
            return true;
    }
};

前面的代码应该处理在系统中安装新应用时发生的基本事情, 例如, 快捷方式将添加到”开始”菜单和桌面中, 并且在执行卸载程序时它将删除快捷方式, 此外, 它无需任何修改即可工作。如果需要, 可以随意添加更多代码。

4.构建你的应用

完成了完成已安装应用程序的基本任务所需的修改, 现在继续构建你的应用程序。我们假设你知道如何使用电子包装程序之类的工具来构建应用程序。如果不这样做, 请阅读以下有关如何在Windows中使用电子打包程序从你的应用程序创建发行版的文章。

在知道如何构建你的应用程序之后, 继续进行操作。导航到工作空间(以便在其中创建项目):

cd C:\Users\sdkca\Desktop\electron-workspace\myapp-source

并构建项目, 例如, 我们将使用以下命令构建项目:

electron-packager C:\Users\sdkca\Desktop\electron-workspace\myapp-source --platform=win32 --arch=x64 myapp-source-built

这将在电子工作空间文件夹中创建具有以下结构的myapp-source-built-win32-x64文件夹:

电子建筑项目结构

5.从你的应用程序创建安装程序

构建项目后, 你可以从中创建安装程序。创建一个将在其中创建安装程序的文件夹, 特别是在我们的工作空间(C:\ Users \ sdkca \ Desktop \ electron-workspace)中, 并使用你想要的名称, 在这种情况下, 它将是myapp-source-built-installers。你不会触摸此文件夹, 因为安装程序将在下一步自动创建。在这一步, 你应该有4个文件夹(myapp-source-built-installers为空):

电子工作区文件夹

现在创建一个脚本来创建我们的安装程序, 在电子工作区(C:\ Users \ sdkca \ Desktop \ electron-workspace)中创建build.js文件, 其中包含以下代码:

注意

如果你不习惯使用相对路径, 则可以在第一次尝试中使用绝对路径来了解正在发生的事情。

// C:\Users\sdkca\Desktop\electron-workspace\build.js
var electronInstaller = require('electron-winstaller');

// In this case, we can use relative paths
var settings = {
    // Specify the folder where the built app is located
    appDirectory: './myapp-source-built-win32-x64', // Specify the existing folder where 
    outputDirectory: './myapp-source-built-installers', // The name of the Author of the app (the name of your company)
    authors: 'Our Code World Inc.', // The name of the executable of your built
    exe: './myapp-source-built.exe'
};

resultPromise = electronInstaller.createWindowsInstaller(settings);
 
resultPromise.then(() => {
    console.log("The installers of your application were succesfully created !");
}, (e) => {
    console.log(`Well, sometimes you are not so lucky: ${e.message}`)
});

注意

你可以在上一个脚本的设置中更改图标和其他属性。在此处检查所有受支持的选项。

要从你的应用程序构建安装程序, 只需执行此脚本即可。但是, 如果你发现此错误:

Component / @ Id属性的值” your-app-exe-name.exe”不是合法标识符。标识符可以包含ASCII字符A-Z, a-z, 数字, 下划线(_)或句点(。)。每个标识符必须以字母或下划线开头。

必须在/your-built-project/resources/app/package.json文件中编辑项目的name属性, 并删除或替换所有连字符(-符号), 例如, 如果package.json看起来像:

{
  "name": "electron-quick-start"
}

更改为:

{
  "name": "electron_quick_start"
}

如果你已经对此进行了验证, 请继续执行build.js脚本, 并使用NodeJS命令提示符导航到工作空间:

cd C:\Users\sdkca\Desktop\electron-workspace

并执行脚本:

node build.js

安装程序文件将被创建, 并且将花费一些时间。创建安装程序后, 你将在控制台中看到以下消息:

安装程序成功创建的电子应用程序

最后, 打开installers文件夹(在本例中为C:\ Users \ sdkca \ Desktop \ electron-workspace \ myapp-source-built-installers), 你会发现3个安装程序(msi安装程序, 可执行安装程序和nuGET软件包) ):

电子应用安装程序

你可以尝试以管理员身份执行Setup.exe文件在本地安装你的应用程序。然后, 迷你安装程序将在你的系统上安装该应用程序, 你将能够在Windows的开始菜单中以及桌面的快捷方式中看到它:

注意

如果你在build.js脚本的loadingGif选项中提供了要在安装过程中显示的gif文件的路径, 则可以更改设置加载动画。

电子应用程序桌面

请注意, 可执行文件的名称, 描述和其他属性可以在应用程序的package.json和winstaller模块的选项中进行更改, 有关更多信息, 请访问存储库以查看文档。

重要笔记

对于开发或内部使用, 创建没有签名的安装程序是可以的, 但是对于生产应用程序, 你需要对应用程序进行签名。 Internet Explorer的SmartScreen筛选器将阻止你的应用程序下载, 并且许多防病毒供应商都将你的应用程序视为恶意软件, 除非你获得有效的证书。

任何对” Authenticode代码签名”有效的证书都可以在这里使用, 但是如果你获得了正确的代码证书, 也可以选择加入Windows错误报告。此MSDN页面包含有关在何处获得WER兼容证书的最新链接。为此, “标准代码签名”证书就足够了。

编码愉快!

赞(0)
未经允许不得转载:srcmini » 如何为使用Electron Framework构建的应用程序创建Windows安装程序

评论 抢沙发

评论前必须登录!