Electron 打包自定义NSIS脚本为安装向导增加自定义页面增加输入框

news2024/11/16 12:25:17

Electron 打包工具有很多,如Electron-build、 Electron Forge 等,这里使用Electron-build,而Electron-build使用了nsis组件来创建安装向导,默认情况nsis安装向导不能自定义安装向导界面,但是nsis提供了nsis脚本可以扩展安装向导。

0.效果图

在这里插入图片描述

1.配置nsis脚本

在新建nsis脚本文件resources/installer.nsh,并添加自定义内容:

!define MUI_LANGUAGE "Chinese"
Unicode true

!include nsDialogs.nsh
!include LogicLib.nsh

#OutFile nsDialogs.exe
#RequestExecutionLevel user
#ShowInstDetails show

Var Dialog
Var apiUrl
Var other1
Var other2
Var other3
Var other4
Var skipSet

Page custom pgPageCreate pgPageLeave

Function pgPageCreate

    nsDialogs::Create 1018
    Pop $Dialog

    ${If} $Dialog == error
        Abort
    ${EndIf}

    ${NSD_CreateGroupBox} 10% 10u 80% 100u "接入地址配置"
    Pop $0

        ${NSD_CreateLabel} 20% 26u 20% 10u "接入地址:"
        Pop $0

        ${NSD_CreateText} 40% 24u 40% 12u ""
        Pop $apiUrl

        ${NSD_CreateLabel} 20% 40u 20% 10u "其他配置1:"
        Pop $0

        ${NSD_CreateText} 40% 38u 40% 12u ""
        Pop $other1

        ${NSD_CreateLabel} 20% 54u 20% 10u "其他配置2:"
        Pop $0

        ${NSD_CreateText} 40% 52u 40% 12u ""
        Pop $other2
        
        ${NSD_CreateLabel} 20% 68u 20% 10u "其他配置3:"
        Pop $0

        ${NSD_CreateText} 40% 66u 40% 12u ""
        Pop $other3

        ${NSD_CreateLabel} 20% 82u 20% 10u "其他配置4:"
        Pop $0

        ${NSD_CreateText} 40% 80u 40% 12u ""
        Pop $other4

        ${NSD_CreateCheckbox} 20% 96u 100% 10u "跳过当前设置"
        Pop $skipSet

    nsDialogs::Show
FunctionEnd

Function PgPageLeave
    ${NSD_GetText} $apiUrl $0
    ${NSD_GetText} $other1 $1
    ${NSD_GetText} $other2 $2
    ${NSD_GetText} $other3 $3
    ${NSD_GetText} $other4 $4
    ${NSD_GetState} $skipSet $6
	;将配置信息写入文件: C:\用户\用户名\AppData\Roaming\demo\config.json
    ${If} $6 == 0
        SetOutPath "$APPDATA\demo"
        CreateDirectory "$APPDATA\demo"
        ;FileOpen $9 $APPDATA\demo\config.json w
        ;FileWrite $9 '{"apiUrl":"$0","other1":"$1","other2":"$2","other3":"$3","other4":"$4"}'
        ;FileClose $9
        ;SetFileAttributes $APPDATA\demo\config.json NORMAL

        StrCpy $0 '{"apiUrl":"$0","other1":"$1","other2":"$2","other3":"$3","other4":"$4"}'
        FileOpen $5 "$APPDATA\demo\config.json" "w"
        FileWrite $5 $0
        FileClose $5
    ${EndIf}

FunctionEnd

Section
SectionEnd

2.在package.json添加nsis脚本

在package.json的build中的nsis添加我们自定义nsis脚本的引用:"include": "resources/installer.nsh",完整配置如下:

"build": {
    "appId": "com.demo.electron",
    "productName": "Electron应用示例",
    "copyright": "Copyright © Electron应用示例",
    "mac": {
      "category": "public.app-category.utilities"
    },
    "win": {
      "icon": "./resources/icons/icon.ico",
      "target": [
        {
          "target": "nsis",
          "arch": [
            "ia32",
            "x64"
          ]
        }
      ],
      "artifactName": "${productName}_${version}-${arch}.${ext}"
    },
    "nsis": {
      "oneClick": false,
      "allowElevation": true,
      "allowToChangeInstallationDirectory": true,
      "installerIcon": "./resources/icons/icon.ico",
      "uninstallerIcon": "./resources/icons/icon.ico",
      "installerHeaderIcon": "./resources/icons/icon.ico",
      "createDesktopShortcut": true,
      "createStartMenuShortcut": true,
      "shortcutName": "Electron应用示例",
      "runAfterFinish": true,
      "include": "resources/installer.nsh"
    },
    "files": [
      "dist/**/*",
      "dist-electron/**/*"
    ],
    "directories": {
      "buildResources": "assets",
      "output": "dist-build"
    },
    "publish": [
      {
        "provider": "generic",
        "url": "http://192.168.1.2/release/"
      }
    ],
    "extraResources": [
      "./plugins/${platform}/${arch}/**"
    ]
  },

3.打包

执行打包命令:
npm run electron:build.exe

打包完双击安装包就有效果了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1568202.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

YOLO火灾烟雾检测数据集:20000多张,yolo标注完整

YOLO火灾烟雾检测数据集:一共20859张图像,yolo标注完整,部分图像应用增强 适用于CV项目,毕设,科研,实验等 需要此数据集或其他任何数据集请私信

kubadm部署kubernetes

什么是kubernetes Kubernetes是一款应用于集群的,容器自动部署、扩展和管理的开源平台,提供了一种以容器为中心的基础架构。利用kubernetes,你可以快速高效地响应客户如下请求: 应用程序的动态、精准部署应用程序的动态扩展无缝推…

vscode + wsl1 搭建远程C/C++开发环境

记录第一次搭建环境过程。 搭建C/C开发环境有很多种方式,如 MinGW vscode(MinGW 是GCC的Windows版本,本地编译环境)SSH隧道连接 vscode(远程Linux主机)wsl vscode(远程Linux环境&#xff09…

第14章 数据结构与集合源码

一 数据结构剖析 我们举一个形象的例子来理解数据结构的作用: 战场:程序运行所需的软件、硬件环境 战术和策略:数据结构 敌人:项目或模块的功能需求 指挥官:编写程序的程序员 士兵和装备:一行一行的代码 …

GPT4不限制使用次数了!GPT5即将推出了!

今天登录到ChatGPT Plus账户,出现了如下提示: 已经没有了数量和时间限制的提示。 更改前:每 3 小时限制 40 次(团队计划为 100 次);更改后:可能会应用使用限制。 GPT-4放开限制 身边订阅了Ch…

C语言——字符串函数

一.前言 我们在日常写代码的过程中&#xff0c;经常会对字符串进行处理的过程。而在C语言中的<string.h>中&#xff0c;包含了众多字符串函数&#xff0c;我们可以借助这些字符串函数来对其进行各种操作。 二.strlen函数 strlen函数的作用是求出所传字符串的长度。该函…

图片改大小尺寸怎么改?几个修改图片尺寸的方法

日常生活和工作中&#xff0c;图片的大小和尺寸对于我们的工作和生活都至关重要&#xff0c;因此我们经常需要调整图片的大小。我们都知道压缩图是一款功能强大的图片在线处理工具&#xff0c;那么用它怎么调整图片大小呢&#xff1f;下面就让我们一起来看一下具体的操作步骤。…

网络与并发编程(二)

线程_信号量 互斥锁使用后&#xff0c;一个资源同时只有一个线程访问。如果某个资源&#xff0c;我们同时想让N个(指定数值)线程访问&#xff1f;这时候&#xff0c;可以使用信号量。 信号量控制同时访问资源的数量。信号量和锁相似&#xff0c;锁同一时间只允许一个对象(进程…

Python项目21:一个简单的记账系统(收入+支出+查询)

------------★Python练手项目源码★------------ Python项目源码20&#xff1a;银行管理系统&#xff08;开户、查询、取款、存款、转账、锁定、解锁、退出&#xff09; Python项目19&#xff1a;学员信息管理系统&#xff08;简易版&#xff09; Python项目18&#xff1a;…

IDEA配置本地Maven(解决依赖下载缓慢)

1.下载Maven Maven下载页 根据需要选择下载其中一个&#xff0c;我选了zip格式的 将下载好的apache-maven-3.9.5解压到你想要的目录下 2.配置系统环境 设置系统环境变量 MAVEN_HOME 为安装路径的bin目录 变量名&#xff1a;MAVEN_HOME 变量值&#xff1a;写你的 apache-m…

远程登录服务器(ubuntu20.04)在自己账号下的虚拟环境(python3.6)安装Jupyter并连接pycharm使用

参考&#xff1a;Jupyter notebook/lab安装及远程访问 1、安装jupyter pip install notebook遇到的问题&#xff1a; &#xff08;1&#xff09;运行这个指令之前尝试了好多方法都安不上 此前还尝试了更新pip之类的&#xff0c;大家安不上也可以先更新pip试试。 &#xff0…

list的常用接口底层实现与介绍

目录 概念&#xff1a; list的基本结构&#xff1a; list的迭代器⭐❤&#xff1a; 自定义类型的完善&#xff1a; const的迭代器&#xff1a; insert erase&#xff1a; size empty push_back 、push_front 、pop_back、pop_front swap 、operator 析构函数…

记录Http访问服务接口出现 301 Moved Permanently

记录Http访问服务接口出现 301 Moved Permanently 一、项目背景 ​ 在A服务中 需要通过远程调用 B服务接口 获取数据。A项目与B项目部署在不同的服务接口中。 请求接口响应界面 ​ 在调用B项目的接口时&#xff0c;响应的数据一直为 301 Moved Permanently Html代码&#x…

【星计划★C语言】c语言初相识:探索编程之路

&#x1f308;个人主页&#xff1a;聆风吟_ &#x1f525;系列专栏&#xff1a;星计划★C语言、Linux实践室 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 &#x1f4cb;前言一. ⛳️第一个c语言程序二. ⛳️数据类型2.1 &#x1f514;数据单位2.2 &…

2024福建三支一扶报名流程,超全超详细!

2024年福建三支一扶报名已经开始&#xff0c;请注意时间&#xff01; ⚠2024年福建省省级“三支一扶”计划招募岗位1070个 报名时间&#xff1a;4月1日8:00至4月17日17:00 审查考核&#xff1a;4月18日至5月10日 确定派遣人员&#xff1a;5月11日至5月31日 报名入口&#xff1…

Day66-企业级防火墙iptables精讲2

Day66-企业级防火墙iptables精讲2 1. iptables项目案例2&#xff1a;局域网共享上网&#xff1a;2. iptables项目案例3&#xff1a;外网IP的端口映射到内网IP的端口3. 老男孩教育iptables项目案例4&#xff1a;IP一对一映射&#xff08;DMZ&#xff09;4. 老男孩教育iptables项…

jdbc连SQL server,显示1433端口连接失败解决方法

Exception in thread "main" com.microsoft.sqlserver.jdbc.SQLServerException: 通过端口 1433 连接到主机 localhost 的 TCP/IP 连接失败。错误:“connect timed out。请验证连接属性。确保 SQL Server 的实例正在主机上运行&#xff0c;且在此端口接受 TCP/IP 连接…

在project模式下自定义Implementation Strategies

Implementation Settings定义了默认选项&#xff0c;当要定义新的implementation runs时会使用这些选项&#xff0c;选项的值可以在Vivado IDE中进行配置。 图1展示了“Settings”对话框中的“implementation runs”对话框。要从Vivado IDE打开此对话框&#xff0c;请从主菜单中…

文件管理--fscanf,fread,fwrite和fprintf

fprintf函数&#xff1a;对于fprintf函数&#xff0c;它和printf一样&#xff0c;但是它的表达式为&#xff1a;int fprintf ( FILE * stream, const char * format, ... );和printf的很相似&#xff0c;但有不一样。它是格式化输出函数&#xff0c;代码为&#xff1a; #includ…

2024年清明节安装matlab 2024a

下载安装离线支持包SupportSoftwareDownloader_R2024a_win64&#xff0c;地址https://ww2.mathworks.cn/support/install/support-software-downloader.html&#xff0c;运行软件&#xff08;自解压运行&#xff09;&#xff0c;登录账号&#xff08;需要提前在官网注册&#x…