Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >NSIS 打包 Electron 项目的注意事项(拖拽、权限、兼容性等)

NSIS 打包 Electron 项目的注意事项(拖拽、权限、兼容性等)

作者头像
我与梦想有个约会
发布于 2023-10-21 07:23:46
发布于 2023-10-21 07:23:46
1.7K00
代码可运行
举报
文章被收录于专栏:jiajia_dengjiajia_deng
运行总次数:0
代码可运行

我自己本人不做 Electron 的开发,但有一位合作伙伴在使用 NSIS 打包 Electron 应用的时候遇到了一些问题,主要问题有以下几个,先记录下来,然后追个击破。

  • 打包后应用在 Windows 7 无法直接运行,需要修改兼容性为 Windows 7 才可以使用
  • 打包后安装或者卸载时应用在运行会安装或者卸载失败,无法替换或删除应用(这个与 Electron 无关但也介绍一下)
  • 打包后应用第一次启动无法使用拖拽功能

脚本设置启动程序兼容性

设置程序兼容性有两种方式,一种是手动右键修改,但这种方式明显不可能让用户自己去操作,所以我们需要另外一种方式就是在安装程序后自动写入一个注册表,告诉系统我们启动自己的应用时使用 Windows 7 兼容模式运行,示例注册表如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers]
"C:\\Program Files (x86)\\MyOffice\\avic.exe"="WIN7RTM"

要在 NSIS 的脚本中写入这个注册表,可以像下面这样操作:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Section -Post
  WriteUninstaller "$INSTDIR\uninst.exe"
  WriteRegStr HKCU "Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" "$INSTDIR\avic.exe" "WIN7RTM"
  WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "" "$INSTDIR\avic.exe"
  WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)"
  WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninst.exe"
  WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$INSTDIR\avic.exe"
  WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}"
  WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "URLInfoAbout" "${PRODUCT_WEB_SITE}"
  WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}"
SectionEnd

如代码第三行所示,我们将应用安装所在目录下的执行程序通过 WriteRegStr 方法写入到了注册表中,给它设置的值是 WIN7RTM,这样应用在启动的时候,就会以 Windows 7 兼容性模式运行了。

安装或卸载前结束应用

需要两个插件,一个是 KillProcDLL.dll,另一个是 FindProcDLL.dll,这两个插件均可以从 NSIS 官网下载。以下是示例脚本:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Function .onInit
  FindProcDLL::FindProc "avic.exe"
  Pop $R0
  IntCmp $R0 1 0 no_run
  MessageBox MB_OKCANCELMB_ICONSTOP  "安装程序检测到 ${PRODUCT_NAME} 正在运行。$\r$\n$\r$\n点击 “确定” 强制关闭${PRODUCT_NAME},继续安装。$\r$\n点击 “取消” 退出安装程序。" IDCANCEL Exit
  KillProcDLL::KillProc "avic.exe"
  Sleep 1000
  FindProcDLL::FindProc "avic.exe"
  Pop $R0
  IntCmp $R0 1 0 no_run
  Exit:
  Quit
  no_run:
FunctionEnd

Function un.onInit
  MessageBox MB_ICONQUESTIONMB_YESNOMB_DEFBUTTON2 "您确定要卸载[MyOffice]?" IDYES +2
  Abort
  #检测程序是否运行
  FindProcDLL::FindProc "avic.exe"
  Pop $R0
  IntCmp $R0 1 0 no_run
  KillProcDLL::KillProc "avic.exe"
  Sleep 1000
  FindProcDLL::FindProc "avic.exe"
  Pop $R0
  IntCmp $R0 1 0 no_run
  Quit
  no_run:
FunctionEnd

打包后无法使用拖拽功能

经过排查发现,NSIS 打包后安装包程序默认是以管理员身份启动的,第一次安装完成后自动启动应用时会继承安装包的权限(管理员)导致拖拽功能无法使用了,而直接从桌面运行快捷方式是没问题的。解决这个问题的办法就是让安装包不以管理员方式运行就可以了。在初始化代码中加如下代码,让安装包使用普通用户权限:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
RequestExecutionLevel user

当安装包没有管理员权限后,你安装到 C:\Program Files 目录就会被拒绝,这时你可以参考想 VSCode 一样,将应用安装到 C:\Users\Administrator\AppData\Local\Programs 目录下,来避免权限问题。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-11-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
NSIS 打包 Electron 生成exe安装包
每次文章都从0开始 从搭建开始 使用的是electron-vue 毕竟方便一点 如果只想安装electron 请参见我的另一个文章https://segmentfault.com/a/11...
李昊天
2019/05/26
2.1K0
NSIS 打包脚本基础
本文介绍了如何使用 NSIS 脚本实现静默安装,并给出了具体的实现步骤和代码示例。
静默虚空
2018/01/05
5K0
NSIS 打包脚本基础
NSIS 脚本,安装时添加防火墙规则
根据 C 厂的长期实践经验,最佳做法是写一个 UpdateFix 类似的程序集, 然后通过命令行参数调用起来,靠 C# 代码编写逻辑处理防火墙。 一方面可以实现较高控制,避免各种脚本的奇异表现和让杀毒软件开森, 另一方面可以比较方便编写代码进行调试以及在后续 OTA 时执行统一的行为
jgrass
2024/12/25
1020
NSIS 脚本,安装时添加防火墙规则
写完 Electron 后,我好像对 PyQt5 变心了
在上一篇文章中,州的先生介绍了使用 Electron 为 MrDoc 开发一个跨平台的桌面客户端的事情:
州的先生
2021/12/01
2.9K0
写完 Electron 后,我好像对 PyQt5 变心了
Electron桌面应用打包流程(记录一下)
 参考链接:http://www.runoob.com/nodejs/nodejs-install-setup.html
力力
2019/08/26
6K0
Electron桌面应用打包流程(记录一下)
不联网的情况下,使用 electron-builder 快速打包全平台应用
Electron 之所以能够日益风靡,是因为其简单易用且对各个操作平台具有良好的支持。
编程三昧
2022/03/03
3.7K0
不联网的情况下,使用 electron-builder 快速打包全平台应用
【C++】Qt:基于windeployqt+nsis程序打包和发布
windeployqt是一个Qt提供的非常有用的命令行工具,用于将Qt应用程序所需的所有依赖项自动复制到应用程序的构建目录中,以便在没有Qt安装的计算机上运行应用程序。
DevFrank
2024/07/24
6710
【C++】Qt:基于windeployqt+nsis程序打包和发布
如何用uniapp打包桌面客户端exe包,vue或者uni项目如何打包桌面客户端之electron开发-优雅草央千澈以开源蜻蜓AI工具为例子演示完整教程-开源代
通常我们都用uniapp开发安卓和苹果客户端,还有小程序客户端,但是如果要打包桌面exe是否可行?
卓伊凡
2025/01/01
3692
你不知道的 Electron (二):了解 Electron 打包
我们知道 Electron 提供了一个类似浏览器,但有更多权限的环境来运行我们的网页,那么 Electron 是怎么做到将我们的网页代码打包成一个可执行程序的呢?
IMWeb前端团队
2019/12/03
3.7K0
图解使用VS的安装项目打包程序
本文介绍了如何使用VS2019制作安装程序,包括创建安装向导、添加项目输出、添加资源文件、添加注册表、添加对话框和修改安装页面。
静默虚空
2018/01/05
1.8K0
图解使用VS的安装项目打包程序
可执行文件名中包含 install 或 setup
在 Windows Vista+ 系统下,若 EXE 文件名中包含有「install」、「update」或「setup」等字样,可能出现如下问题:
mzlogin
2020/04/16
6300
可执行文件名中包含 install 或 setup
electron打包爬坑—出坑
昨天一番解了很久想解这个electron打包python可执行文件为一体的方法,因为要发布我们的小工具,必须要打包为一个安装包啊,不然对于计算机小白来讲太不友好了。今天一番发挥极客精神,必须要将这个问题解决啊,至少。。。。暂时在某种程度上解决这个问题吧。
efonfighting
2019/10/29
3.1K1
electron打包爬坑—出坑
如何把Electron做成一个Runtime,让多个应用共享同一个Electron
下面我就说一下我的思路: (以下内容以Windows平台为基础,Mac平台和Linux平台还得去调查一下,才能确定是否可行)
liulun
2021/12/24
1.8K0
得物商家客服从Electron迁移到Tauri的技术实践
得物商家客服采用的是桌面端应用表现形式,而桌面端应用主要架构形式就是一套和操作系统交互的“后端” + 一套呈现界面的“前端(渲染层)”。而桌面端技术又可以根据渲染层的不同核心划分为以下几类:
得物技术
2024/12/05
6770
线上Electron应用具备哪些特征?
在上一节中我们介绍了如何升级 Electron 应用,现在我们已经介绍完了如何开发一个 Electron 应用以及如何把 Electron 应用分发给用户。如果按照一个产品的生命周期来考虑,那么我们现在面对的是如何观察、分析、调试线上应用了,如果你不了解 Electron 应用在用户侧的特征,那么就很难正确的分析线上应用的问题。
liulun
2022/11/16
1.3K0
常用软件打包类型及静默安装参数(nsis|msi|InstallShield|Inno)
今天搞了一个装机软件,可以导入第三方软件,在导入的时候提示输入静默参数,于是我就了解了一些,什么是静默参数。
德顺
2019/11/12
16.4K0
如何用Vue开发Electron桌面程序? 这篇就够了!
Electron 是一个由 GitHub 及众多贡献者组成的活跃社区共同维护的开源项目. 使用 JavaScript,HTML 和 CSS 构建跨平台的桌面应用程序
治电小白菜
2021/01/05
6.1K2
如何用Vue开发Electron桌面程序? 这篇就够了!
Windows 7社区发布活动 -- Windows 7兼容性概述
今天在深圳的Windows 7社区发布活动讲了Session 2 -- Windows 7兼容性概述。今天参会的人员达到60多个,大家也非常积极的讨论。我的Session时间安排上有点紧张,没有留给大家提问的时间,最后由朱兴林回答在几个Session结束后统一回答大家的问题。在抽奖环节,我抽取一等奖的奖品-- windows 7,得主是位女生,各位得主最后有张合影。 我的PPT下载Win7应用开发兼容性.zip 下面简要介绍一下今天的内容:微软的操作系统更新换代仍然按照自己的步伐,从XP到2003、vist
张善友
2018/01/31
1.8K0
Electron搭配React的history路由模式打包exe客户端
Electron安装安装问题npm或者yarn安装electron就算是配置了淘宝源还是会出现超时。所以我的解决方案是安装cnpm,使用cnpm去安装。 全局安装cnpm npm i cnpm -G 复制代码 新建项目 cnpm init // 一路Enter然后到最后一步输入yes // 安装dev相关依赖 cnpm i electron -D //安装electron cnpm i electron-builder -D // 用来打包客户端安装包 -- 需要下一步下一步安装来完成
阿珍
2022/07/14
1.7K0
fbs: 让我们更容易的打包和部署python工具
能方便他们能在无python情况下去使用,也能做到一些简单代码的保护和提高一些运行速度。
用户9897904
2022/07/14
1.7K0
fbs: 让我们更容易的打包和部署python工具
推荐阅读
相关推荐
NSIS 打包 Electron 生成exe安装包
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验