innosetup系列之先卸载之后再安装(代码片段)

yidaixiaohui yidaixiaohui     2023-02-04     756

关键词:

需求
使用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, SOFTWAREMicrosoftWindowsCurrentVersionUninstall3FC1FD05-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







关于innosetup卸载程序删除文件夹的问题

如题,我在卸载这一段是这么写的:ifMsgBox('您是否要删除用户配置信息?',mbConfirmation,MB_YESNO)=IDYESthenDelTree(ExpandConstant('app'),True,True,True);运行结果是删除了所有安装文件夹下面的文件但是现在我想保留其中的部分数据... 查看详情

卸载nginx之后重新安装(代码片段)

Ubuntu14.04上卸载nginx之后重新安装没有重新生成配置文件的解决方法在配置nginx做实验时配置错了,导致访问不了虚拟主机。一狠心把nginx的配置文件目录(/etc/nginx)都删除了,而且我没有备份这些配置文件,因此想重装nginx。本来... 查看详情

innosetup命令行安装卸载参数

安装命令行参数安装程序接受可选的命令行参数。这些对于系统管理员以及其它程序调用安装程序时有用。/SP- 在安装开始时禁用“这将安装... 你想继续吗?”的提示,当然,如果 [Setup] 段的指令 DisableS... 查看详情

innosetup使用(代码片段)

目录InnoSetup简介参考脚本参考在进行WPF程序打包发布的时候如果对程序打包没有特别高的要求,InnoSetup足以胜任普通的程序打包发布需求,它支持安装包加密,安装包升级安装,注册表操作等常规功能,以下脚本示例中有对常见... 查看详情

innosetup安装卸载时判断是否程序正在运行

varErrorCode:Integer;IsRunning:Integer;//安装时判断客户端是否正在运行functionInitializeSetup():Boolean;beginResult:=true;//安装程序继续IsRunning:=FindWindowByWindowName(‘E家人客户端‘);whileIsRunning<>0dobeginifMsgbox(‘安 查看详情

一个innosetup创建安装包的例子(代码片段)

环境说明InnoSetup版本:5.5.9特色说明[1]安装前检测应用是否运行,若运行则提示关闭(未借助额外dll,使用系统命令tasklist)[2]针对安装环境缺少MicrosoftVisualC++2015(==请自助修改==)的环境自动执行安装制作安装包;ScriptgeneratedbytheInnoSetupS... 查看详情

跪求innosetup补丁包更新后,卸载程序不能删除注册表?

innosetup补丁包更新后,卸载程序不能删除注册表原打包程序我加上,卸载清除注册表选项,效果很好。但是做了个补丁包,更细版本后,再卸载程序,就不能清除注册表了。麻烦朋友们帮忙解决下,谢谢·~~参考技术A用360安全卫... 查看详情

用innosetup或者其他软件打包exe程序怎么防止重复安装的问题

...vaswing做了个桌面应用,然后用exe4j打成了exe文件,然后用innosetup打包程序,我现在有个问题是,打包程序时要写注册表什么的吗?如果安装后,再安装怎么做成提示修复或者卸载,而不是让它能再装一次,还有个问题,我的桌面... 查看详情

innosetup打包exe安装应用程序,并添加卸载图标转

 http://blog.csdn.net/guoquanyou/article/details/7445773InnoSetup真是一个非常棒的工具.给我的印象就是非常的精干.所以,该工具已经一步步的把我的InstallerVise代替了.InnoSetup最棒的在于他的脚本语言,完全的pascal语法,你可以在学习他的时候... 查看详情

innosetup安装前删除旧文件和文件夹

...前先删除原来的目录.希望大侠教教我这个小白:P  使用InnoSetup默认功能删除这些不用的垃圾文件以达到干净卸载的目的。  代码如下:  //注意!代码必须使用[code]段才能够正常运行  [code]  //删除所有配置文件以达... 查看详情

innosetup区段之components篇(代码片段)

InnoSetup区段之Components篇简述场景:多组件可以自定义勾选安装的时候,通过Components+Types的形式来实现ComponentsName必需的区分组件,/用来区分组件级别Description必需的安装期间的描述Types组件所属类型如果用户从这个列表中选择了... 查看详情

Inno Setup:如何自动卸载以前安装的版本?

】InnoSetup:如何自动卸载以前安装的版本?【英文标题】:InnoSetup:Howtoautomaticallyuninstallpreviousinstalledversion?【发布时间】:2011-01-0107:11:57【问题描述】:我正在使用InnoSetup创建安装程序。我希望安装程序自动卸载之前安装的版本... 查看详情

程序打包(安装包制作,innosetup打包教程,qt程序打包)(代码片段)

...序同理)二、准备阶段:2.1下载并安装打包工具 Innosetup中文版 密码:id092.2将QT程序DLL快速关联QT缺少DLL解决方案例如,我已经成功demo.exe程序关联好dll。返回上一层目录该目录中:Applications:存放程序的运行... 查看详情

innosetup5如何更改卸载图标(我做出来的安装程序和卸载的一样)我想把卸载图标换成别的。

如题,能不能给出脚本?在线等解答。1.准备好图标文件,和脚本放入同意目录下。2.使用一个名为UpdateIcon.dll的插件3.添加Code段,代码如下://插件函数用法//参数:句柄(插件错误对话框的父句柄),exe文件完整路径名称,(exe文件中要... 查看详情

jdk的卸载及安装(代码片段)

卸载JDK先找到java的安装目录,然后删除。先鼠标右键我的电脑->属性>高级>环境变量,然后在系统变量中找到java的安装目录将其删除。然后删除JAVA_HOME和系统变量下的PATH(没看到的滑动滚轮)下关于JAVA_HOME的属性(先点编辑,... 查看详情

docker重学系列之dockercompose(代码片段)

Docker重学系列之DockerComposeDockerCompose简介安装与卸载1.linux2.macos、window3.bash命令补全4.卸载5.测试安装成功dockercompose使用dockercompose使用实例演示docker-compose模板文件buildcommandcontainer_namedepends_onenv_fileenvironmentexpose 查看详情

innosetup区段之tasks篇(代码片段)

简述这个区段是可选,它定义安装程序在执行安装期间所又用户定制的任务。光任务本身是不会做任何事情的,它需要链接到其他安装条目上[Tasks]Name:必需的任务名称Description:必需的,描述GroupDescription:任务组的描述Components:... 查看详情

nsis或innosetup打包软件如何得到当前文件名

1.NSIS或InnoSetup打包软件如何得到当前文件名?2.复制一份包中已经解压的exe并以获取到的文件名命名;补充:并不是打包时定义的名称,而是随便修改后的名称,例如生成的是setup.exe,我改成setup_kusila.exe获取kusila并以解压出来的test... 查看详情