NSIS 关于 uninst.exe 的签名问题

【问题描述】

uninst.exe 文件是由安装程序(setup.exe在执行安装的时候生成的。即使 setup.exe 有被签名,但是 uninst.exe 是没有签名的,导致安装程序会被安全软件(例如:360软件)拦截。

注:setup.nsi 是通过 WriteUninstaller "$INSTDIR\uninst.exe" 来生成卸载程序。


【解决方案一】

通过执行setup.exe(不要签名),先生成卸载程序,然后对卸载程序进行签名,再将卸载程序打包进setup.exe。

1)首先,由NSIS生成setup.exe,注意:不要对setup.exe进行签名。

2)执行setup.exe,待安装完成后,到安装目录找到uninst.exe,然后对uninst.exe进行签名。

3)uninst.exe文件与需要被释放到安装目录下的文件一起打包。

4)注释掉setup.nsi文件中的这句:WriteUninstaller "$INSTDIR\uninst.exe"。

5)重新编译setup.nsi生成setup.exe,并对其进行签名。


【解决方案二】

整体思路跟方案一类似,就是在编译的时候生成卸载程序(uninst.exe),然后再打包到setup.exe中!但是是通过代码方式:

1)新建一个nsis工程uninstall.nsi。把setup.nsi里面的Function un.XX,都移到uninstall.nsi中去。

2)uninstall.nsi 的 section install中只保留:WriteUninstaller "$EXEDIR\uninst.exe" ;与setup.exe同目录

3)添加以下代码:

        ShowInstDetails hide ; 设置是否显示安装详细信息nevershow
        ShowUninstDetails hide ; 设置是否显示卸载详细信息nevershow
        SilentInstall silent ; 静默安装
        ;SilentUnInstall silent ; 静默卸载

4)编译uninstall.nsi,并运行,就会在当前目录下生成uninst.exe。然后给它签名。  

5)把生成的uninst.exe打包到setup.exe中,同时去掉:WriteUninstaller "$INSTDIR\uninst.exe"

6)setup.nsi中,用包含dll的方法包含uninst.exe文件。           

注意:事先生成uninst.exe有一个问题,就是安装路径。如果是用户选择安装路径,生成uninst.exe的时候就不知道安装路径具体的值。即使是不让用户选择安装路径,不同系统上路径也会不一样的。所以uninst.exe点击卸载的时候就找不到正确的安装路径。解决方法:通过在setup.nsi把安装路径写入指定的注册表路径中的,uninst.exe通过访问注册表获取安装路径。


# ====================== 自定义宏 产品信息============================== !define PRODUCT_NAME "BotAgent" !define PRODUCT_PATHNAME "WillingBotAgent_PC" #安装卸载项用到的KEY !define INSTALL_APPEND_PATH "WillingBotAgent" #安装路径追加的名称 !define INSTALL_DEFALT_SETUPPATH "" #默认生成的安装路径 !define EXE_NAME "WillingBotAgent.exe" !define PRODUCT_VERSION "4.0.0.0" !define PRODUCT_PUBLISHER "武汉慧灵控科技有限公司" !define PRODUCT_LEGAL "武汉慧灵控科技有限公司 Copyright(c)2017" !define INSTALL_OUTPUT_NAME "Test.exe" # ====================== 自定义宏 安装信息============================== !define INSTALL_7Z_PATH "..\app.7z" !define INSTALL_7Z_NAME "app.7z" !define INSTALL_RES_PATH "skin.zip" !define INSTALL_LICENCE_FILENAME "licence.rtf" !define INSTALL_ICO "logo.ico" !define UNINSTALL_ICO "uninst.ico" #SetCompressor lzma !include "ui_nim_setup.nsh" # ==================== NSIS属性 ================================ # 针对Vista和win7 的UAC进行权限请求. # RequestExecutionLevel none|user|highest|admin RequestExecutionLevel admin ; 安装包名字. Name "${PRODUCT_NAME}" # 安装程序文件名. OutFile "..\..\Output\${INSTALL_OUTPUT_NAME}" ;$PROGRAMFILES32\Netease\NIM\ InstallDir "$PROGRAMFILES64" # uncomment the following line to make the installer silent by default. SilentInstall silent # 安装和卸载程序图标 Icon "${INSTALL_ICO}" UninstallIcon "${UNINSTALL_ICO}" 这段脚本代码有什么作用
最新发布
03-14
<think>嗯,用户让我分析这段NSIS脚本代码的作用。首先,我需要回忆一下NSIS是什么。NSIS是Nullsoft Scriptable Install System,用来制作Windows安装程序的工具。这段代码看起来像是一个安装脚本的配置部分。 用户之前问过关于静默安装的问题,现在他们可能是在深入理解现有的安装脚本,以便进行修改。所以,我需要详细解释这段代码的结构和各个部分的作用,帮助他们理解哪里可能需要调整,尤其是在添加静默安装功能时。 首先,我会看代码中的各个宏定义,比如PRODUCT_NAME、PRODUCT_PATHNAME等。这些应该是在定义产品的基本信息,比如名称、版本、发布者。这些信息会在安装过程中显示,或者在系统的添加删除程序中看到。 接下来,安装信息部分,比如INSTALL_7Z_PATH,可能指定了压缩包的位置,用于解压安装文件。这里用到了7z格式,说明安装文件是压缩过的,安装时会解压到目标目录。然后,RequestExecutionLevel admin这一行,说明安装程序需要管理员权限,这在处理系统目录时是必要的。 然后是OutFile指定输出文件的路径,也就是生成的安装程序名称和位置。InstallDir设置默认安装目录,这里用了$PROGRAMFILES64,应该是64位系统的Program Files目录。SilentInstall silent可能尝试设置静默安装,但根据之前的对话,用户提到当前代码不支持静默安装,可能这里的设置有问题或者被覆盖了。 还有图标设置,安装和卸载的图标文件,这对用户体验有影响,但和功能关系不大。包含的"ui_nim_setup.nsh"文件可能定义了用户界面相关的设置,比如皮肤或自定义对话框,这可能影响静默安装,因为静默时需要跳过这些UI步骤。 用户可能需要了解这些配置如何影响安装行为,尤其是静默安装的实现。比如,现有的SilentInstall silent可能没有生效,因为代码中有图形界面交互的部分,如协议勾选和路径输入,这些在静默模式下需要自动处理。需要检查是否有其他代码覆盖了静默设置,或者是否有条件判断来区分静默和正常安装模式。 另外,宏定义中的路径和名称是否正确,特别是安装路径的拼接,比如INSTALL_DEFALT_SETUPPATH为空,可能默认路径是Program Files加上INSTALL_APPEND_PATH,这需要确认是否正确,避免安装到错误的位置。 用户可能希望知道这些配置项的作用,以便调整静默安装的参数,比如如何通过命令行传递安装路径,或者自动接受协议。因此,在解释代码时,需要指出哪些部分与静默安装相关,哪些可能需要修改,比如添加命令行参数解析,自动设置安装路径等。 总结来说,这段脚本配置了安装程序的基本信息、文件来源、安装目录、权限要求以及界面元素。用户需要在这些配置的基础上,修改或添加条件判断,以支持静默安装的参数处理和自动配置。</think>以下是这段NSIS脚本代码的详细解析: --- ### 一、基础配置模块 $$\text{作用范围:} \text{定义安装程序核心参数与资源路径}$$ ```nsis # ====================== 自定义宏 产品信息============================== !define PRODUCT_NAME "BotAgent" # 程序显示名称 !define PRODUCT_PATHNAME "WillingBotAgent_PC" # 注册表/卸载项唯一标识 !define INSTALL_APPEND_PATH "WillingBotAgent" # 安装路径追加目录 !define EXE_NAME "WillingBotAgent.exe" # 主程序文件名 !define PRODUCT_VERSION "4.0.0.0" # 四段式版本号 !define PRODUCT_PUBLISHER "武汉慧灵控科技有限公司" # 发布者信息 !define INSTALL_OUTPUT_NAME "Test.exe" # 生成的安装包名称 ``` **关键行为:** 1. 控制安装包在系统注册表中的显示名称 (`PRODUCT_PATHNAME`) 2. 自动构建安装路径:`$PROGRAMFILES64\WillingBotAgent` 3. 版本号格式符合Windows标准(用于驱动签名验证) --- ### 二、资源路径配置 $$\text{作用范围:} \text{声明安装包内嵌文件}$$ ```nsis !define INSTALL_7Z_PATH "..\app.7z" # 主程序压缩包路径 !define INSTALL_7Z_NAME "app.7z" # 解压时使用的临时文件名 !define INSTALL_RES_PATH "skin.zip" # 界面皮肤资源 !define INSTALL_LICENCE_FILENAME "licence.rtf" # RTF格式许可协议 !define INSTALL_ICO "logo.ico" # 安装包图标 !define UNINSTALL_ICO "uninst.ico" # 卸载程序图标 ``` **文件处理流程:** 1. 安装时自动解压`app.7z`到目标目录 2. 加载`skin.zip`实现定制化安装界面 3. 通过`licence.rtf`显示富文本格式协议 --- ### 三、系统级配置 ```nsis RequestExecutionLevel admin # 强制要求管理员权限 OutFile "..\..\Output\${INSTALL_OUTPUT_NAME}" # 输出到上级目录的Output文件夹 InstallDir "$PROGRAMFILES64" # 默认安装到64位Program Files目录 SilentInstall silent # 理论静默安装支持(实际被后续代码覆盖) ``` **特殊机制说明:** 1. `RequestExecutionLevel admin`触发UAC提权流程 2. `$PROGRAMFILES64`变量确保64位系统兼容性 3. `SilentInstall silent`声明与后续UI代码存在冲突(需改造) --- ### 四、界面扩展配置 ```nsis !include "ui_nim_setup.nsh" # 引用第三方皮肤库 Icon "${INSTALL_ICO}" # 安装包exe图标 UninstallIcon "${UNINSTALL_ICO}" # 生成卸载程序的图标 ``` **关联影响:** 1. `ui_nim_setup.nsh`实现非标准安装界面(进度条/按钮样式定制) 2. 图标资源嵌入PE文件的资源区段 --- ### 五、技术特性总结表 | 类别 | 实现方式 | 典型表现 | |----------------|--------------------------------------------------------------------------|--------------------------------------------------------------------------| | **权限控制** | `RequestExecutionLevel admin` | 安装时触发UAC弹窗 | | **文件部署** | 7z压缩包解压 + 动态路径拼接 | 最终安装路径:`$PROGRAMFILES64\WillingBotAgent` | | **版本管理** | 四段式版本号定义 | 兼容Windows驱动签名验证 | | **界面呈现** | 第三方皮肤库(nsNiuniuSkin) + 自定义图标 | 非标准Windows安装界面风格 | | **静默支持** | 声明`SilentInstall silent`但被图形库覆盖 | 当前实际无法静默安装 | --- ### 六、潜在问题说明 1. **路径冲突风险** `InstallDir "$PROGRAMFILES64"` 与 `INSTALL_APPEND_PATH` 组合可能导致某些系统出现路径解析异常(如非英语系统环境) 2. **静默安装失效** 虽然声明了`SilentInstall silent`,但引用的`ui_nim_setup.nsh`中包含强制界面操作(如`nsNiuniuSkin::ShowPageItem`) 3. **版本号规范** `4.0.0.0`四段式版本号需要同步到EXE文件的版本信息,否则可能引发杀毒软件误报 建议优先处理静默安装支持问题,可通过条件编译隔离图形库调用。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hellokandy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值