NSIS脚本学习:如何检测并卸载已有软件版本

2023-10-31

前言

目前开发的程序以基于.net的应用程序为主,程序开发好后,需要进行安装包的生成,及setup文件的生成。
常见的是NSIS工具,之前一直用的单文件打包工具,不适合将运行环境加进去,因此开始使用更高版本的NSIS 3.06。
这里要解决的是安装包生成后,原有电脑已有旧版本的软件,这里需要检测判断是否需要卸载旧版本的软件,便于更新。

检测并自定义卸载

在NSIS脚本的最后面,附加以下代码即可解决该问题

Var UNINSTALL_PROG
Var OLD_VER
Var OLD_PATH

Function .onInit
  ClearErrors
  ReadRegStr $UNINSTALL_PROG ${PRODUCT_UNINST_ROOT_KEY} ${PRODUCT_UNINST_KEY} "UninstallString"
  IfErrors  done
  
  ReadRegStr $OLD_VER ${PRODUCT_UNINST_ROOT_KEY} ${PRODUCT_UNINST_KEY} "DisplayVersion"
  MessageBox MB_YESNOCANCEL|MB_ICONQUESTION \
    "检测到本机已经安装了 ${PRODUCT_NAME} $OLD_VER。\
    $\n$\n是否先卸载已安装的版本?" \
      /SD IDYES \
      IDYES uninstall \
      IDNO done
  Abort
    
uninstall:
  StrCpy $OLD_PATH $UNINSTALL_PROG -10
  ExecWait '"$UNINSTALL_PROG" /S _?=$OLD_PATH' $0
  DetailPrint "uninst.exe returned $0"
  Delete "$UNINSTALL_PROG"
  RMDir $OLD_PATH
done:
FunctionEnd
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NSIS脚本学习:如何检测并卸载已有软件版本 的相关文章

  • Qt之NSIS打包

    一 Qt发布方式 Qt发布的时候 通常使用两种方式 1 静态编译 把相关联的库一并引入可执行程序 虽然发布简单 但可执行程序较大 2 动态编译 把相关联的库 以dll的形式引用 不包含到可执行程序 发布不方便 但可执行程序较小 二 NSIS
  • NSIS 自动静默更新

    我目前正在构建一个应用程序 并希望为其提供安装程序和自动静默更新 Dropbox Spotify 和 Chrome 都擅长在无人察觉的情况下进行更新 因此 我查看了 AppData 中的 Dropbox 漫游文件夹 发现了一个名为 Drop
  • NSIS - 如何递归地仅包含源文件夹和子文件夹中的所有文件?

    每个人 我试图将一些 parentdir 与文件包含到我的安装程序中 问题是 我使用 r 参数来包含所有文件和文件夹 如下所示 File r parentdir 此命令包括所有文件和子文件夹 是否有机会仅将所有子文件夹 下面的示例 中的文件
  • 选择后添加浏览安装目录“${PRODUCT_NAME}”后的 NSIS 目录页面

    我有一个带有目录页面的简单 NSIS 脚本 用户可以在其中选择要安装应用程序的目录 请参阅下面的示例 如果应用程序已安装 它将从注册表或 www 根目录或 program files publisher product name 中获取值
  • 如何检测安装的 JRE 类型 - 32 位与 64 位

    在使用 NSIS 安装程序进行安装期间 我需要检查系统上安装了哪个 JRE 32 位与 64 位 我已经知道我可以检查系统属性 sun arch data model 但这是 Sun 特有的 我想知道是否有一个标准的解决方案 可以使用 检索
  • 检查返回代码(或其他代码)以确保 MSI 已正确安装

    我正在使用 NSIS 安装一些 MSI 我在用着ExecWait msiexec passive liare SETUP LOG FILE i TEMP MyMsi msi 当 MSI 与已安装的应用程序版本相同时 安装会失败 已安装此产品
  • 在 Windows 上安装更新时 Electron 自动更新失败

    我有一个电子应用程序 它使用electron builder用于构建 打包和发布应用程序 我有以下自动更新代码 autoUpdater logger log autoUpdater logger transports file level
  • 为 NSIS 安装程序设置 UAC“发布者”字段

    当我打开安装程序 使用 NSIS 创建的 时 会出现 UAC 对话框 其中包含有关我的安装程序的信息 场出版商是 未知 我听说过对应用程序进行数字签名 您知道如何在 NSIS 中执行此操作吗 如何设置字段 属性出版商到 我的安装程序 或其他
  • 使用 NSIS 安装程序向注册表项授予权限的有效方法是什么?

    我正在尝试使用访问控制插件 http nsis sourceforge net AccessControl plug in在 NSIS 中设置注册表项的权限 它不起作用 安装程序运行后 所有用户组没有完全控制权 我在下面创建了一个示例 这里
  • 在 NSIS 脚本中安装驱动程序

    我正在尝试创建一个安装 inf 文件的 NSIS 安装程序 inf 文件从安装程序中提取到正确的位置 然后我使用 nsExec ExecToLog SYSDIR PnPutil exe a INSTDIR driver xser inf 然
  • 如何写入或读取 XML 配置文件 (.config)

    我必须在安装的后期部分编写一个配置文件 如果存在旧版本的产品 则必须从配置文件中读取 配置文件是 XML 配置文件 config 配置文件将有很多条目 例如
  • 有没有办法提前测试Windows exe是否会因为缺少dll而无法加载?

    如果您尝试在没有任何更新的情况下在 Windows 8 1 上安装 vs2015 Redistributable 它将安装失败 但它会在安装过程中进行足够多的操作 guid 位于注册表中 因此 如果您运行一个程序来检查注册表中是否存在可再发
  • 如何在 NSIS 中使用 try catch

    您好 我在安装时在 nsis 安装程序中的几台机器上遇到了奇怪的错误 使用 fontreg nsh 安装字体时给出 无效的 win32 文件句柄 我试过谷歌但没有得到这个问题的答案 现在我正在考虑抑制此消息 那么有什么方法可以抑制此消息 或
  • NSIS - 静默自动更新应用程序

    我有一个适用于我的 net c 应用程序的 NSIS 安装工具包 考虑到我已经将新的更新 新的 NSIS 应用程序版本 下载到本地计算机 有没有办法静默自动更新我的应用程序 谢谢 如果您需要检测命令行 Autoupdate yes incl
  • 如何让 NSIS 安装并执行临时目录中的文件?

    我正在使用以下 NSIS 脚本 Name My app wrapper Outfile MyAppSetup exe InstallDir TEMP MyApp Install Function onInit SetSilent silen
  • NSIS:在标签中插入链接

    假设我有以下 nsDialog 标签 单击 接受 即表示我同意示例的许可协议和隐私政策 您可以访问需要使用个人信息的功能 欲了解更多信息 请下载示例的内容政策 我想在此标签中插入链接 如下所示 单击 接受 即表示我同意示例的内容许可协议 h
  • msinfo32 无法在 Windows XP 下的 NSIS 中运行

    以下 NSIS 行由于某种原因拒绝在 Windows XP 下运行 立即返回 ExecWait PROGRAMFILES Common Files Microsoft Shared MSInfo msinfo32 report DESKTO
  • 如何使用 NSIS 脚本检测 Windows 32 位或 64 位?

    我已经为java项目编写了nsis脚本 我的项目中有批处理文件 我已经为常见的Windows 32位和64位编写了批处理文件 安装后我已经使用自动启动批处理文件Exec命令 它在 32 位 Windows 中工作正常 但同时这在 64 位
  • NSIS - 适合所有用户的桌面快捷方式

    安装软件包时如何为所有用户创建桌面快捷方式 NSIS 支持几种通用 共享的特殊文件夹 http anders k users sourceforge net public NSIS 2 46 Manual html varconstant
  • NSIS获取参数

    to get n 0值作为字符串 不需要选项 传递给安装程序 我不太明白这个函数的工作原理是什么 GetParameters input none output top of stack replaces with e g whatever

随机推荐