`
txf2004
  • 浏览: 6975546 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

怎样用installshield12做升级程序

阅读更多

我用的是installshield12,我先说明,installshield12做的安装程序本身,是可以设置成自动检测有没有新的版本的,嗯,我不懂怎么搞,我想了这样的办法,这样的办法可以用在installshield 6.x的版本里的

这个办法要求在做安装程序的时候,一定要先在注册表里写上程序的安装路径和机器类型

安装路径就是程序安装在什么路径下了,在installshield里是由变量TARGETDIR记录的,我在注册表里,用了install这样的健值记录

机器类型就是安装程序的机器是做什么用的,有的机器安装程序,是用来做服务器的,这个机器上面带有数据库,升级的时候,有时要升级数据库的,我选择在服务器上升级数据库,有的机器安装程序,是用来做客户端的,这个机器上面没有数据库,升级的时候,要跳过数据库升级部分

我测试了一个项目,在注册表里,我写了这样的一个注册项:HKEY_LOCAL_MACHINE\SOFTWARE\NNLL,在这个注册项下面,我有两个键值,一个是install,记录安装路径,一个是sc,记录机器类型

这些注册项怎么在安装程序里写进去,可以查看这篇博客:
http://blog.csdn.net/JavaProgramers/archive/2008/04/15/2293118.aspx

这里讲的是怎么利用这两个注册表键值做一个可以自动升级数据库和文件的升级程序

新键一个安装工程,设置要安装的文件,全都和普通的安装程序一样做法,不同的地方是Installation Interview这一步,这里有四个设置:

第一个Licerse Agreement Dialog,是设置要不要显示软件协议

第二个prompt users to enter their Company Name and User Name,是设置要不要用户在安装时输入公司名和用户名

第三个modify the installation location of your application,是设置可以不可以让用户选择安装路径

第四个selectively install only certain parts of your application,是设置可以不可以让用户选择安装程序里的哪部分内容

这四个东西,在升级的时候全都用不上,全部都设置成NO

还有一个不同呢,就是因为升级程序一般都是单个文件的好,所以在Build Installation里,要选择Single Executable,这样安装包到最后就会被打包成一个单一的文件了

最后呢,就是修改安装脚本,修改OnFirstUIBefore函数,在声明变量的部分,要添加五个变量,szPath是记录安装路径的,szServer是记录机器类型的

//NNLL添加变量
string szPath,szServer;
string szKey;
number nType,nRootKey;
//NNLL
添加结束

Dlg_SdFeatureTree后,添加下面的脚本,读取安装路径和机器类型,设置安装路径

//提取注册表,取安装路径和是否服务器端
//
置根为nRootKey
nRootKey = HKEY_LOCAL_MACHINE;
RegDBSetDefaultRoot (nRootKey);
//
取安装路径
szKey="SOFTWARE\\NNLL";
if RegDBKeyExist(szKey) = 1 then
//
存在这个项,取这个项下的键值
nSize=-1;
nType=REGDB_STRING;
//
取安装路径
szName="install";
RegDBGetKeyValueEx (szKey, szName, nType, szPath, nSize);
//
取是否服务器端
szName="sc";
RegDBGetKeyValueEx (szKey, szName, nType, szServer, nSize);
//
设置安装路径
TARGETDIR=szPath;
else
//
如果没有这个注册项,退出升级程序
MessageBox("
升级程序在非法安装的程序上无效,请购买正版软件",SEVERE);
abort;
endif;

上面取到的szServer是机器类型,要根据这个的值,判断是不是要用升级数据库,很简单的,给Dlg_SQLServerDlg_ObjDialogs加上判断就行了

if szServer="S" then
//
如果是服务器端的,就升级数据库
Dlg_SQLServer:
nResult = OnSQLServerInitialize( nResult );
if( nResult = BACK ) goto Dlg_SdFeatureTree;

Dlg_ObjDialogs:
nResult = ShowObjWizardPages( nResult );
if (nResult = BACK) goto Dlg_SQLServer;
endif;

这段是判断sc,如果值是S,就是服务器机器,要升级数据库

下面我说一下升级数据库的问题,在Server Configuration->SQL Script里,添加连接,给连接添加一个sql脚本,把你的数据库要升级的东西,全都写在脚本里,就可以了

看我这一段,我在数据库里,有一个表,叫nnll_version,里面有一个build字段,是记录补丁号的,我每次升级,最少也要把这个补丁号写上,所以我的最简单升级脚本就是这个

use NNLLTABLE
declare @build varchar(20)
select @build=build from nnll_version
if ( @build<'20061117' )
begin
update nnll_version set build='20061117'
end
go

关于升级数据库脚本的设置,详细的可以看这篇博客:
http://blog.csdn.net/JavaProgramers/archive/2008/04/15/2293879.aspx

下面呢,我再说这个升级的安装程序搞好后,每个版本要怎么搞,嗯,我的意思是啊,我在20061117升级了程序,我做了一个升级程序的工程,如果我在20061217程序又要升级了,我们不用重新做一个升级程序的工程的,修改下面几项:

1、项目名称:菜单Project->Settings,在Application标签,修改Product的设置,我是这样设置的:NNLL的软件 v1 build 20061117 升级程序

2、要升级的文件:Organization->Setup Design,在这里,要重新设置对应的Component里面的Static File Links,把原来的文件去掉,换上新的文件就可以了

3、要升级的数据库脚本:Server Configuration->SQL Scripts,在这里,把你的脚本重新修改成新的

4、安装包的名字:Media->Releases,选中你的安装包,补丁文件都是单文件的好,所以呢,是SINGLE_EXE_IMAGE,选中这个,就可以修改他的属性了,修改Single Exe File Name,我是修改成:NNLL软件v1build20061117补丁.exe

5、项目名称:菜单Project->Settings,在Application标签,Product那一栏的id编号,点击Change按钮,这样第二次使用这个projcetbuild出来的升级程序时,就不会叫你卸载

最后呢,就是重新生成安装包:菜单Build->Build SINGLE_EXE_IMAGE,等生成完了,你就可以在Media\SINGLE_EXE_IMAGE\Package目录下找到你的升级程序了

我说一下我的这个办法有什么不好的地方

1、我放成installshield11.5的新功能不用,自己想了一个办法,嗯,是因为我对着一堆的英文,看得很辛苦,对中文也辛苦

2、如果有坏蛋的用户,他们升级客户端机器,不升级服务器,那我的数据库就变成没有升级了,如果升级程序有动了数据库结构,那新的文件版本就对不上旧的数据库了,客户端运行的时候,肯定会报错,用户就肯定会找你的,说你的软件出错了

我想过这个的解决办法,就是要读取数据库的信息,如果数据库里面build字段是>=当前升级脚本的补丁号的,那就允许升级客户端机器,else呢,来一个

MessageBox("请先升级服务器",SEVERE);
abort;

嗯,我不知道怎么在installshield的脚本里读数据库里的build的值,所以我不知道这个办法怎么搞

我想过把这个数据库的版本号写在注册表里,那就要安装程序也修改了,要再加一个注册表键值,好麻烦啊,我不要搞了,谁喜欢,谁搞

3、反安装的问题,这样子搞法,连补丁都可以反安装了,还要是反安装补丁后,是把补丁里面的文件删除的,就是说呢,如果有用户反安装了补丁,那我们的软件就变成少了几个文件了,安装程序是可以设置不可以反安装的,我现在还不懂怎么搞.

分享到:
评论

相关推荐

    Installshield 12 中文教程

    本教程主要围绕Installshield 12的中文版本,深入讲解如何使用其Basic MSI项目模板来构建可靠且易于分发的软件安装程序。 一、Installshield 12概述 Installshield 12是Flexera Software公司发布的一款专业安装制作...

    installshield打包程序资料

    7. **安装程序设计**:使用InstallShield,开发者可以设计出具有交互式用户界面的安装程序,包括欢迎界面、许可协议、目标位置选择、组件选择等,以提高用户体验。同时,它支持多种语言,方便国际化部署。 8. **...

    C++打包程序InstallShield for C++

    **C++打包程序InstallShield for C++** 在软件开发领域,尤其是C++编程中,将编译后的程序打包成易于安装的格式对于分发和部署至关重要。InstallShield是一款功能强大的安装制作工具,专为开发者设计,它使得创建、...

    Installshield12.rar_Installshield 9 _installshield_installshield

    本教程旨在全面介绍从InstallShield 9到InstallShield 12的升级与变化,帮助用户掌握这一强大的软件部署解决方案。 一、InstallShield 9简介 InstallShield 9在发布时,以其直观的用户界面和强大的功能集赢得了赞誉...

    InstallShield 12 SP1 user guide

    在本指南中,你将了解到如何使用InstallShield 12 Service Pack 1 (SP1) 版本来构建、定制和分发安装程序。以下是该软件的一些核心功能和关键知识点: 1. **项目向导**:引导用户完成创建新安装项目的步骤,包括...

    installshield 12,installscriptproject 升级包制作步骤

    InstallShield 12 是一款强大的安装包制作工具,尤其适合创建 InstallScript 项目,它允许开发者构建复杂的安装程序,包括创建升级包。本教程将详细解释如何使用 InstallShield 12 制作 InstallScript 项目的升级包...

    InstallShield2021+补丁

    在实际使用InstallShield2021时,开发者首先需要安装主程序,然后根据需求选择是否应用补丁。在创建安装项目时,可以自定义安装界面、设置安装条件、管理依赖关系、处理许可协议、添加启动和卸载脚本等。通过灵活的...

    Installshield12教程.rar

    这个"Installshield12教程.rar"压缩包包含了一系列的教程文件,帮助用户深入理解和掌握InstallShield 12的使用方法。 首先,"InstallShield简明教程.pdf"可能会涵盖InstallShield的基本概念,如项目创建、安装界面...

    Installshield12安装及注册

    对于后续的软件更新,InstallShield12也提供了方便的升级和修补功能。 总结,InstallShield12作为一款专业的安装制作工具,其安装和注册过程相对直观。通过理解并掌握这些步骤,开发者可以更加高效地打包和发布软件...

    Installshield 12 中文系列教程之 配置服务(一)数据库

    在IT行业中,InstallShield是一款广泛使用的安装包制作工具,它帮助企业快速、轻松地创建和部署软件应用程序。InstallShield 12是该系列的一个版本,它提供了丰富的功能来满足各种安装需求,包括配置服务和数据库的...

    InstallShield_2010汉化

    InstallShield是一款业界领先的安装制作工具,尤其在创建Windows应用程序的安装包方面,它以其强大的功能和易用性著称。本文将针对"InstallShield 2010汉化"这一主题,详细探讨其汉化过程、汉化的重要性以及在实际...

    Installshield使用_手册_教程_大全

    InstallShield作为业界广泛使用的应用程序安装打包工具,它帮助企业快速、有效地构建安装程序,确保软件能够顺利在用户系统上部署。这个教程大全涵盖了从基础到高级的各种主题,适合初学者和经验丰富的开发者学习。 ...

    InstallShield Pro

    InstallShield是由同名的公司制作的一款可以制作安装程序的开发包。该公司自从2004年被Macrovision所购并之后,InstallShield产品纳入Macrovision的FLEXnet产品系列,因此在原名前冠上FLEXnet而成为FLEXnet ...

    InstallShield 2010 sp1 下载

    对于压缩包内的文件"InstallShield_2010",这很可能是包含完整安装程序的文件,用户需要运行这个文件来安装或升级到InstallShield 2010 SP1。在安装前,确保系统满足最低硬件和软件需求,比如操作系统版本、内存大小...

    InstallShield2010使用实例

    《InstallShield 2010使用实例详解》 InstallShield是一款知名的软件安装包制作工具,广泛应用于Windows平台上的应用程序部署。2010版本作为其重要迭代,提供了更丰富的功能和改进,使得软件安装包的创建更为便捷和...

    InstallShield 2010 SP1 Premier 破解补丁

    首次使用的开发者将发现它非常容易创建安装程序,而高级用户也将发现它的潜力与灵活性,非常适合开发复杂的软件安装。InstallShield支持最新技术包括Visual Studio 2005/2008,.NET 2.0, .NET 3.0/3.5,SQL Server ...

    InstallShield 2010简体中文汉化包

    InstallShield是一款业界广泛使用的应用程序安装制作工具,它允许开发者创建专业级别的安装程序,以方便用户安装、升级和卸载软件。2010年版本的InstallShield更是因其强大的功能和易用性而备受青睐。然而,对于中文...

    InstallShield_VS2015.zip

    InstallShield是业界广泛使用的安装制作工具,它提供了一套完整的解决方案,用于创建Windows桌面应用程序的安装程序。2015 Limited Edition是InstallShield的一个特别版本,专为Visual Studio 20的开发者设计,旨在...

    用InstallShield制作商业软件安装程序

    ### 使用InstallShield制作商业软件安装程序 #### 一、引言 随着软件工程的发展和市场竞争的加剧,软件的“包装”变得越来越重要。这不仅包括软件本身的开发和设计,还包括了如何将软件完整且有效地交付给用户。在...

    InstallShield-PDF_教程

    1. **修补程序和更新**:学习如何使用InstallShield创建更新和修补程序,以方便用户升级。 2. **卸载程序**:配置卸载功能,以便用户轻松移除应用程序。 总之,InstallShield教程将带领你一步步完成程序的打包和...

Global site tag (gtag.js) - Google Analytics