杉宫竹苑工作室

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2230|回复: 0

在 InstallShield 中判断是否已安装老版本程序

[复制链接]
发表于 2019-8-27 00:41:32 | 显示全部楼层 |阅读模式

正式会员享受无限制浏览网站功能和高速网盘下载,赶快加入本站吧!

您需要 登录 才可以下载或查看,没有账号?立即注册

x
     在制作Installer中,有一些安装包,要求先把老版本的程序卸载后,才能安装最新的程序。这样就设计涉及如何检查当前电脑是否已经安装过老版本的程序,如果安装过老的程序,就应该提示用户先把老版本的程序卸载了,才能安装最新的程序。
     InstallShield里的Product Code这个选项,就是一个特定是产品编码,来确定是否是同一个软件的同一个版本。一般我们在有新的版本要发布的时候,都需要修改这个Product Code。比如我的产品:
     1.0.1:
         {2A15BA78-5070-4D58-9D87-1CB4EF9F0591}
     1.0.2:
         {60576944-6FF1-4B24-99DD-3F1C93ADA9C2}
     现在我有最新的2.0.1要发布,其Product Code为:
        {E6246A67-2A88-49C4-B949-40AC600BBDAA}
     我想安装2.0.1的时候,检查1.0.1、1.0.2...等版本是否被安装过,如果安装过,提示用户卸载了再来安装我的2.0.1。
不管怎么样我们先在InstallScript的脚本文件中,建立如下的函数:
  1. export prototype CheckOldVersion(HWND);   

  2. function CheckOldVersion(hMSI)
  3. begin
  4.     RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);
  5.     if( (RegDBKeyExist("\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{2A15BA78-5070-4D58-9D87-1CB4EF9F0591}")>0)
  6.      || (RegDBKeyExist("\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{60576944-6FF1-4B24-99DD-3F1C93ADA9C2}")>0) )then
  7.          MessageBox("1Another version of this product is already installed.\nInstallation of this version cannot continue. To \nconfigure or remove the existing version of this product,\nuse Add/Remove Programs on the Control Panel.",WARNING);
  8.          abort;
  9.     endif;
  10.      return ERROR_SUCCESS;
  11. end;
复制代码

     接下去按照安装工程的类型,分两种情况:
     1.Basic MSI Project
       a. 在Behavior and Logic-->Custom Action and Sequences-->Cutom Action右键,new InstallShield,名字改为CheckOldVersion
1.jpg
       b. Function Name选择我们刚创建的函数
2.jpg
       c.Custom Action and Sequences-->Sequences-->Installtion-->User Interface右键-->Insert,选择我们刚新建的Cutom Action(CheckOldVersion)
3.jpg
     2.InstallScript Project
     InstallScript Project中只要在OnFirstUIBefore中的Dlg_Start中插入以上代码就可以了:
4.jpg

      当然InstallScript Project也可以使用1的方法来实现版本的检查。


附:把一个Basic MSI Project转为InstallScript Project:
      Project-->; Project Converters-->Convert to InstallScript Project.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|SgzyStudio

GMT+8, 2024-4-25 06:22 , Processed in 0.118913 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表