需求
使用Inno Setup打包程序之后,很多时候我们需要在安装文件之前卸载原有的程序而不是覆盖安装,本文的Code就是实现了这样的功能。如果想要在安装前先卸载,那么需要加下面代码,需要注意的是双星号里面的 `{3FC1FD05-BEC7-430A-B7DB-F07155FDE93E}` 部分的改为你们自己的。网上看到有些说_is1前面用AppName,但是我这边不行,下面code中 `{3FC1FD05-BEC7-430A-B7DB-F07155FDE93E}` 为你的程序名,可以去你的 Inno Setup 脚本中找到程序ID: AppId={`{3FC1FD05-BEC7-430A-B7DB-F07155FDE93E}` 也可以到注冊表中确认,为防止以后忘记,在这里记录一下,方便以后使用。

实现原理是:从注冊表 'UninstallString' 项中读取卸载信息,用Exec进行静默卸载。

[Setup]

; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={**{3FC1FD05-BEC7-430A-B7DB-F07155FDE93E}**
AppName={#MyAppName}
AppVersion={#MyAppVersion}

[Code]

function InitializeSetup(): boolean;
var
ResultStr: String;
ResultCode: Integer;
begin
if RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{3FC1FD05-BEC7-430A-B7DB-F07155FDE93E}_is1', 'UninstallString', ResultStr) then
begin
ResultStr := RemoveQuotes(ResultStr);
Exec(ResultStr, '/silent', '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
end;
result := true;
end;

静默安装,就是减少程序与用户的交互,一站式的安装过程

1. 静默安装参数
Inno Setup 的静默安装是通过参数来控制的

1.1. `/silent` 静默安装,但如果又报错,还是会提示,并且有进度条

1.2. `/verysilent` 静默安装,更强制,不过是否报错,都不会有任何提示

(注意:如果需要重启电脑,它会不提示而直接重启)

1.3. `/suppressmsgboxes` 由 `suppress`(抑制,镇压)和`msgboxes`(消息框),组成,表示不提示消息框

1.4. `/norestart` 结合1.2使用,这样就不会没有提示而直接重启了

参数用法例子:

qq.exe /silent /suppressmsgboxes

更多参数请参考官方文档:http://www.jrsoftware.org/ishelp/index.php?topic=scriptfunctions

2. 不仅安装过程可以静默,卸载过程也可以实现
常用参数也一样,但执行的是相应的卸载程序而已

如:

uninstall.exe /silent /suppressmsgboxes

更多参数请参考官方文档:http://www.jrsoftware.org/ishelp/index.php?topic=uninstcmdline

Inno Setup 中文帮助文档
https://download.csdn.net/download/qq_36190858/10836946

Inno Setup 系列之先卸载之后再安装的更多相关文章

  1. Inno Setup 系列之安装、卸载前检测进程运行情况并关闭相应进程

    需求 最近用 Inno Setup 做一个exe,可是在安装之前要停止正在运行的相应进程或者在卸载之前要停止正在运行的相应进程,可是发现它自身的方法不能满足要求,最后经过度娘的耐心帮助下终于在网上找到 ...

  2. Inno Setup 系列之安装、卸载时调用bat

    需求 想在安装的时候调用install.bat,在卸载的时候调用uninstall.bat 解决 可以这样写 Inno Setup 的脚本: [Setup] ; NOTE: The value of ...

  3. Inno Setup打包之先卸载再安装

    使用Inno Setup打包程序之后,如果想要在安装前先卸载,那么需要加下面代码,需要注意的是红色标注的改为你们自己的.网上看到有些说_is1前面用AppName,但是我这边验证不行. [Setup] ...

  4. (Inno setup打包)检测系统是否已安装程序,若已安装则弹出卸载提示的代码

    原文 http://bbs.itiankong.com/thread-30983-1-5.html 有6天没研究pascal代码了,昨天晚上突然来了灵感,终于解决了苦思冥想好几天没能解决的问题, 因此 ...

  5. mysql 的卸载、再安装与常用命令

    1.卸载mysql.完全删除: 删除 mysqlsudo apt-get autoremove --purge mysql-server-5.0sudo apt-get remove mysql-se ...

  6. Inno Setup入门(十四)——替换安装程序和卸载程序的图标

    通常Inno生成的安装文件的图标是一个光盘和显示器,如下图.同时,程序安装好之后,在安装目录下的卸载程序的图标也是一样的,其实我们也可以自己修改. 首先生成的安装文件图标.这个比较简单,只需要在Set ...

  7. (转)Inno Setup入门(十四)——替换安装程序和卸载程序的图标

    本文转载自:http://blog.csdn.net/yushanddddfenghailin/article/details/17250937 通常Inno生成的安装文件的图标是一个光盘和显示器,如 ...

  8. Inno Setup入门(十四)——替换安装程序和卸载程序的图标

    通常Inno生成的安装文件的图标是一个光盘和显示器,如下图.同时,程序安装好之后,在安装目录下的卸载程序的图标也是一样的,其实我们也可以自己修改. 首先生成的安装文件图标.这个比较简单,只需要在Set ...

  9. VMware卸载后再安装时网络连接处没有虚拟网卡

    解决: 1.打开虚拟机,点击编辑,再点击虚拟网络编辑器 2.将所有的虚拟网络删除 3.删除完所有的虚拟网络之后再添加虚拟网络 4.按照自己想要的的连接方式添加上,网络连接处就会有虚拟网卡

随机推荐

  1. 原生JS和JQ窗口定位属性对照表

    位置 javascript jquery 兼容性 窗口位置离屏幕左偏移 var leftPos = (typeof window.screenLeft == "number") ? ...

  2. 十三、java_GUI

    目录: 一.AWT 二.组件和容器 三.布局管理器 四.事件处理 五.java图形 六.window事件 一.AWT AWT(Abstract Window Toolkit)包括了很多类和接口,用于J ...

  3. Makefile ------ $@ $^ %< 使用

    一步一步理解 1.源程序的编译 在Linux下面,如果要编译一个C语言源程序,我们要使用GNU的gcc编译器. 下面我们以一个实例来说明如何使用gcc编译器. 假设我们有下面一个非常简单的源程序(he ...

  4. how to calculate the best fit to a plane in 3D, and how to find the corresponding statistical parameters

    sklearn实战-乳腺癌细胞数据挖掘(博客主亲自录制视频教程) https://study.163.com/course/introduction.htm?courseId=1005269003&a ...

  5. GO语言的进阶之路-goroutine(并发)

    GO语言的进阶之路-goroutine(并发) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 有人把Go比作21世纪的C 语言,第一是因为 Go语言设计简单,第二,21世纪最重要的 ...

  6. redis的入门篇---五种数据类型及基本操作

    查看所有的key keys * 清空所有的key flushall 检查key是否存在 exists key 设置已存在的key的时长 expire key //设置key为10s 查看key还剩多少 ...

  7. xml合并工具【原】

    我的xml文章 xml转换: xml/map转换器 xml合并: xml合并 dupliate()方法思路图: 左报文为: <PACKET> <HEAD> <REQUES ...

  8. 微信公众号绑定服务器 Flask版

    python 代码 from flask import Flask, request from flask_cors import CORS app = Flask(__name__) app.app ...

  9. centos7 memcached+magent+keepalived集群

    111,222均部署keepalived,magent,memcached keepalived 111为主机,222为备机 其中,111上magent以本地memcache为主,222为备用 222 ...

  10. POJ2031 Building a Space Station【最小生成树】

    题意: 就是给出三维坐标系上的一些球的球心坐标和其半径,搭建通路,使得他们能够相互连通.如果两个球有重叠的部分则算为已连通,无需再搭桥.求搭建通路的最小边长总和是多少. 思路: 先处理空间点之间的距离 ...