• 忘掉天地
  • 仿佛也想不起自己
bingliaolongBingliaolong  2025-09-29 13:19 Aet 隐藏边栏 |   抢沙发  3 
文章评分 2 次,平均分 5.0

脚本相关

setup.nsi

  1. 一些定义

setup.nsh

app.nsh

app_s.nsh

  1. 对应静默

脚本相关-其他

卸载删文件

  1. 普通

  1. 静默

开机自启

快捷方式

调用浏览器打开网页

调用本地notepad

关于函数

  1. un.DUIPage脚本函数里面调用的其他脚本函数,同样要使用un开头

命令行参数检测

  1. 检测有没有--filelist

路径合法性检测

  1. 示例使用插件dll实现

不带回调解压

  1. 用于静默安装
  2. 静默安装未使用相关回调,参考上述app_s.nsh

带回调解压

  1. 普通安装

  1. app.nsh部分内容

  1. ExtractCallback回调
    1. 计算进度,调用SetInstallProgress更新

安装路径生成

StrCmp相关

读写注册表

生成卸载程序

  1. 结合下文卸载程序签名
    1. 首次安装的时候,生成,然后把它放到打包目录,加入打包脚本
      见变量控制行为示例
    2. 之后可以注释下面脚本,让后面安装的时候不生成新卸载程序

变量控制行为

自定义安装界面

  1. 自定义安装页面
    1. 安装程序或卸载程序运行时,将显示你用自己的方法(比如 Duilib)创建的窗口,而不是 NSIS 自带的标准页面
    2. Function DUIPage 你需要实现这个函数,其内部应创建并显示你的自定义安装界面(例如使用你的 test.dll插件),并处理用户交互
    3. Function un.DUIPage 你需要实现这个函数,其内部应创建并显示你的自定义卸载界面,并处理用户交互

编译打包相关

可能的残留

  1. %TEMP%目录
  2. 删除所有以 ns开头(例如 nsdXXX.tmp)的临时文件
    1. 这些是之前编译过程中可能残留的

压缩算法

  1. 需要在 NSIS 脚本的全局范围(通常在 OutFile指令之后,Section 之前)使用 SetCompressor指令

交互

  1. 脚本调用插件dll的接口
    1. Nsis的要求导出函数给脚本调用

  1. 插件dll调用脚本的函数
    1. 使用插件dll导出的绑定函数,将脚本的一些函数注册到插件dll
    2. 调用的时候按名称调用

卸载程序相关

调试问题

  1. 和签名问题有一点关联性,由于第一次打包后,对卸载程序进行了签名,并且重新进行了打包
    1. 所以为了每次打包不覆盖之前的签名,就把生成新卸载程序的脚本屏蔽了
    2. 因此,不会再生成新的卸载程序,一直会是之前签名过的那个版本

  1. 所以,会遇到这样的问题:
    1. 修改了卸载程序相关逻辑和脚本,打出来包后运行却发现根本没有生效
    2. 于是,打个MessageBox看看有没有触发,发现也没有触发
    3. 于是,附加到卸载程序进程,却发现提示pdb对不上,因为根本就不是一个版本
    4. 还没反应过来,于是在卸载程序相关逻辑中打了日志,发现根本没有日志
  2. 解决方法:
    1. 恢复上面注释的脚本,重新打包

签名问题

  1. 第一次打出包,不能对整个安装包签名
  2. 然后先单独对卸载程序签名
  3. 将签名后的卸载程序放到对应的打包目录
  4. 重新打新包
  5. 最后对打出来的新包进行签名

其他

系统自动清理-注册表

  1. 批处理
    1. 系统启动后,用户登录时
    2. 仅一次,任务成功启动后,该注册表条目会被系统自动删除

  1. 除了批处理,还支持其他的

    1. exe
      "C:\MyApp\Installer.exe" /silent

    2. ps1 powershell.exe -ExecutionPolicy Bypass -File "C:\Scripts\Setup.ps1"

    3. 系统命令或命令行工具
      cmd.exe /c "echo Initializing & reg add ..."

    4. Rundll32 调用
      rundll32.exe setupapi.dll,InstallHinfSection ...

    5. VBScript/JScript 脚本

声明:本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

bingliaolong
Bingliaolong 关注:0    粉丝:0 最后编辑于:2025-09-30
Everything will be better.

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享