凤凰求蛊

我使用了以下内容。我不确定这是最简单的方法,但它有效。这种用途{#emit SetupSetting("AppId")}依赖于Inno Setup Preprocessor。如果您不使用它,请直接剪切并粘贴您的App ID。[Code]/function GetUninstallString(): String;var  sUnInstPath: String;  sUnInstallString: String;begin  sUnInstPath := ExpandConstant('Software\Microsoft\Windows\CurrentVersion\Uninstall\{#emit SetupSetting("AppId")}_is1');  sUnInstallString := '';  if not RegQueryStringValue(HKLM, sUnInstPath, 'UninstallString', sUnInstallString) then    RegQueryStringValue(HKCU, sUnInstPath, 'UninstallString', sUnInstallString);  Result := sUnInstallString;end;/function IsUpgrade(): Boolean;begin  Result := (GetUninstallString() <> '');end;/function UnInstallOldVersion(): Integer;var  sUnInstallString: String;  iResultCode: Integer;begin// Return Values:// 1 - uninstall string is empty// 2 - error executing the UnInstallString// 3 - successfully executed the UnInstallString  // default return value  Result := 0;  // get the uninstall string of the old app  sUnInstallString := GetUninstallString();  if sUnInstallString <> '' then begin    sUnInstallString := RemoveQuotes(sUnInstallString);    if Exec(sUnInstallString, '/SILENT /NORESTART /SUPPRESSMSGBOXES','', SW_HIDE, ewWaitUntilTerminated, iResultCode) then      Result := 3    else      Result := 2;  end else    Result := 1;end;/procedure CurStepChanged(CurStep: TSetupStep);begin  if (CurStep=ssInstall) then  begin    if (IsUpgrade()) then    begin      UnInstallOldVersion();    end;  end;end;备择方案另请参阅此博客文章“版本比较的Inno安装脚本示例”,它更进一步,并读取任何以前安装的版本的版本号,并将该版本号与当前安装包的版本号进行比较。

inno setup 卸载注册表_Inno Setup:如何自动卸载以前安装的版本?相关推荐

  1. inno setup 卸载注册表_Inno Setup 注册表启动项 修改注册表

    //注册表启动项 [Registry] Root: HKLM; Subkey: "SOFTWARE\Microsoft\Windows\CurrentVersion\Run"; V ...

  2. inno setup 卸载注册表_inno setup 修改卸载文件名称

    ; Inno Setup 脚本 ; 该示例脚本显示如何自定义卸载文件的名称(默认为 unins000.exe,unins001.exe 等等). [Setup] AppName=自定义卸载文件名示例程 ...

  3. inno setup 卸载注册表_inno setup 自定义生成的卸载程序

    缘由:使用inno setup 生成的现有自动生成的卸载程序不能清理守护进程.更新进程.注册表等相关信息,造成信息残留,一定程度上影响安全性. inno setup 生成的现有自动生成的卸载程序: W ...

  4. //MySQL核心技术// 数据库的介绍、MySQL-5.5.15安装包以及详细安装教程、卸载注册表、MySQL服务的启动与停止、登录与退出

    尚硅谷MySQL核心技术-李玉婷 1.开发者使用的数据库排名: 来源于调查数据: MySQL SQL Server SQLite PostgreSQL MongDB Oracle Redis Cass ...

  5. 西门子step7安装注册表删除_如何完全卸载Siemens PLC编程软件

    无法完全卸载Siemens PLC编程软件,有两种方法可以帮助您解决它. 第一种方法 某些Siemens软件很难通过常规方法进行卸载,导致卸载后无法重新安装已卸载的软件. 注册表中需要大量操作才能再次 ...

  6. 改系统注册表 实现Windows XP自动登录

    改系统注册表 实现Windows XP自动登录 2005-08-19 14:55 作者: 出处: 电脑迷 责任编辑:原野 每次进入Windows XP桌面前,总会出现一个用户登录的画面,要求输入用户名 ...

  7. Inno setup 访问注册表键值,获取软件安装路径

    ; 脚本由 Inno Setup 脚本向导 生成! ; 有关创建 Inno Setup 脚本文件的详细资料请查阅帮助文档! [Setup] ; 注: AppId的值为单独标识该应用程序. ; 不要为其 ...

  8. inno setup 中文乱码问题_Inno Setup添加中文安装语言文件

    如果你不添加中文安装语言文件,你编译生成的安装包的语言是不会有中文. 一,打开软件安装目录下的Languages文件夹下,有如下好多文件,可是就是没有Chianese.isl. 好了,你只需要随便拷贝 ...

  9. 卸载注册表_系统小技巧:软件卸载不了?这里办法多

    在正常情况下,我们都是通过软件程序组中的卸载图标,或利用控制面板中的"程序和功能"模块来卸载软件的.但有时,我们也会发现利用卸载图标无法卸载软件或者卸载图标干脆丢失找不到了,甚至控 ...

  10. revit2018注册表删除_如何完全卸载Revit

    关于如何完全卸载Revit的文章,小编之前跟大家分享过,但是还是有很多小伙伴不太明白,今天就在为各位简答的说一下.我们就以Revit2015做个示范.请注意,默认情况下所列出的所有路径都都适用于Rev ...

最新文章

  1. 如何给HTML添加事件?
  2. memcached全面剖析–4. memcached的分布式算法
  3. css 横线_CSS-画一个太极阴阳图
  4. django-vue-admin脚手架快速开发CRUD教程
  5. 29岁当教授,发表11篇Nature和Science,这位顶尖科学家正式全职回国
  6. ironpython2.7.8相当于python3.7吗_IronPython与numpy的Python速度之比较
  7. java内存区_基于jvm java内存区域的介绍
  8. centos7安装docker 以及简单使用
  9. c语言禁止优化某段代码,C语言优化小技巧
  10. python爬虫作业帮_【Python爬虫】01作业
  11. php使用循环语句输出二位数组,PHP中遍历二维数组—以不同形式的输出操作
  12. MPB:中科院微生物所蔡磊组-运用可培养组技术开展难培养真菌的分离和鉴定
  13. 如何写网站建设策划书
  14. 记录一次网线水晶头的安装
  15. Android Studio实现一个校园图书管理系统
  16. 平常心态过快乐的生活
  17. 关于hxxp //www hj234 com的问题
  18. Linux 文件属性详解
  19. 数字信号处理基于计算机的方法答案,数字信号处理—基于计算机的方法第4章答案.pdf...
  20. 汽车常识全面介绍 - 引擎详论

热门文章

  1. Unity自定义Editor简明教程
  2. linux分区_如何扩展Linux系统根分区
  3. php获取微信生成签名的时间戳,微信开发中access_token,js_ticket,时间戳,签名工具
  4. 网络通信知识点,程序员必备知识
  5. 计算机制作培训通知知识点,计算机学习计划(通用3篇)
  6. c语言不能调用strcat连接两个字符串_C语言中常用的6个字符串处理函数
  7. html 文本框 获取焦点事件,JS的文本输入框获得焦点与失去焦点的事件
  8. Windows 2012 R2 操作系统搭建DHCP-HA集群
  9. Spring mvc时间格式处理
  10. memcache集群服务:memagent配置使用