用NextInstaller制做安装盘及数据库Pack

本文介绍如何利用NextInstaller制作安装盘,并在安装过程中根据当前数据库版本判断是否需要升级。通过读取注册表获取数据库信息,比较版本号,设置更新条件,并生成XML数据。同时展示了设置升级数据库XML执行条件和更新注册表中数据库版本号的方法。
摘要由CSDN通过智能技术生成

<!-- /* Font Definitions */ @font-face {font-family:宋体; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-alt:SimSun; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} @font-face {font-family:"/@宋体"; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; text-align:justify; text-justify:inter-ideograph; mso-pagination:none; font-size:10.5pt; mso-bidi-font-size:12.0pt; font-family:"Times New Roman"; mso-fareast-font-family:宋体; mso-font-kerning:1.0pt;} /* Page Definitions */ @page {mso-page-border-surround-header:no; mso-page-border-surround-footer:no;} @page Section1 {size:595.3pt 841.9pt; margin:72.0pt 90.0pt 72.0pt 90.0pt; mso-header-margin:42.55pt; mso-footer-margin:49.6pt; mso-paper-source:0; layout-grid:15.6pt;} div.Section1 {page:Section1;} /* List Definitions */ @list l0 {mso-list-id:740371960; mso-list-type:hybrid; mso-list-template-ids:-487695572 234141452 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;} @list l0:level1 {mso-level-tab-stop:18.0pt; mso-level-number-position:left; margin-left:18.0pt; text-indent:-18.0pt;} @list l1 {mso-list-id:1340428188; mso-list-type:hybrid; mso-list-template-ids:500873006 -235928014 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;} @list l1:level1 {mso-level-start-at:5; mso-level-text:%1.; mso-level-tab-stop:18.0pt; mso-level-number-position:left; margin-left:18.0pt; text-indent:-18.0pt;} ol {margin-bottom:0cm;} ul {margin-bottom:0cm;} -->

功能说明:安装盘在安装过程中判断当前数据库的版本号,如果版本号少于当前安装盘的版本号,则升级数据库。

 

1.       判断当前数据库的版本号

function void OnProcess()

{

var int     nNewDBVer;

var int    nDBVer;

var int    nDBType;

var int            nDBLoginMode;

var string strDBFile;

var string       strDBName;

var string  strDBPassword;

var string       strDBServer;

var string       strDBUser;

var CRegKey MyKey;

       

nNewDBVer           = 24602;

nDBVer = MyKey.GetRegDWordValue( "HKEY_LOCAL_MACHINE" , "SOFTWARE//MyApp" , "DBVer" , 0 );

nDBType = MyKey.GetRegDWordValue( "HKEY_LOCAL_MACHINE" , "SOFTWARE// MyApp " , "DBType" , 0 );

strDBFile = MyKey.GetRegStrValue( "HKEY_LOCAL_MACHINE" , "SOFTWARE// MyApp " , "DBFile" , "" );

nDBLoginMode     = MyKey.GetRegDWordValue( "HKEY_LOCAL_MACHINE" , "SOFTWARE// MyApp " , "DBLoginMode" , "" );

strDBName = MyKey.GetRegStrValue( "HKEY_LOCAL_MACHINE" , "SOFTWARE// MyApp " , "DBName" , "" );

strDBPassword = MyKey.GetRegStrValue( "HKEY_LOCAL_MACHINE" , "SOFTWARE// MyApp " , "DBPassword" , "" );

strDBServer   = MyKey.GetRegStrValue( "HKEY_LOCAL_MACHINE" , "SOFTWARE// MyApp " , "DBServer" , "" );

strDBUser = MyKey.GetRegStrValue( "HKEY_LOCAL_MACHINE" , "SOFTWARE// MyApp " , "DBUser" , "" );

 

// 如果老的版本事情少于当于安装盘的数据库版本号,则设置 UpdateDB 1

// 表示要升级数据库存

    if( nDBVer < nNewDBVer )

    {

    if( ( nDBType == 0 && strDBFile != "" ) ||(nDBType == 1 && strDBName != "" ) )

    {

           Install.SetVarTabValue( "UpdateDB" ,"1" );

           Install.SetVarTabValue( "VAR_S_DBTYPE" ,nDBType );

           Install.SetVarTabValue( "VAR_S_DBFILE" ,strDBFile );

           Install.SetVarTabValue( "VAR_S_DBNAME" ,strDBName );

           Install.SetVarTabValue( "VAR_S_DBLOGINMODE" ,nDBLoginMode );

           Install.SetVarTabValue( "VAR_S_DBSERVER" ,strDBServer );

           Install.SetVarTabValue( "VAR_S_DBUSER" ,strDBUser );

    }

}

 

Install.SetVarTabValue( "DBVer" ,nNewDBVer );

Install.DoDialog( "SdProcess" );

}

 

2.       设置升级数据XML 的执行条件,系统中有一个 UpdateTab XML, 并设置这个 XML 的执行条件 Condition UpdateDB 这个变量进行关系,如相这个变量值是 1 , 表示条件成立,则执行这个XML, 如果值为 0, 则条件不成立,XML 不执行。

 

 

 

 

 

 

 

 

 

4.创建升级数据库库的 XML 数据

选择 [工具]->[数据库信息倒入/到出] 生成更新数据库的 XML 信息。

 

5.  把最新的数据库版本号写到注册表中

Software/Myapp 下的 DBVer 与变量表中的变量 DBVer 进行关联,则我们中只要在脚本中设置这个变量值,就可以把这个值写到注册表中。

Install.SetVarTabValue( "DBVer" ,nNewDBVer );

6.  End

 

 

 

完整的例子:

ar string                @sTargetPath;

var string              @sDataPath;

var string              @sFilePath;

var CValueSet       DlgParam;

var int                  nOpType;

 

function void OnBegin()

{

       if( Install.IsInstalled() == 0 )

              FirstInstall();

       else

              UpdateInstall();

}

 

function void FirstInstall()

{

  SdWelcome:

    nOpType = Install.DoDialog( "SdWelcome" );

    DataCmpGoto( nOpType , OT_CANCEL ,"Cancel" );

 

  SdSetDestPath:

    nOpType = Install.DoDialog( "SdSetDestPath" );

    DataCmpGoto( nOpType , OT_CANCEL ,"Cancel" );

    DataCmpGoto( nOpType , OT_BREAK  ,"SdWelcome" );

 

  Cancel:

}

 

function void UpdateInstall()

{

    DlgParam.SetValue("SetupModes" , "SM_REPAIR|SM_REMOVE" );

    nOpType = Install.DoDialog( "SdSetupMode" , DlgParam );

}

 

function void OnProcess()

{

       var int     nNewDBVer;

       var int    nDBVer;

       var int    nDBType;

       var int            nDBLoginMode;

       var string strDBFile;

       var string       strDBName;

       var string  strDBPassword;

       var string       strDBServer;

       var string       strDBUser;

       var CRegKey MyKey;

       

nNewDBVer           = 24602;

nDBVer = MyKey.GetRegDWordValue( "HKEY_LOCAL_MACHINE" , "SOFTWARE//MyApp" , "DBVer" , 0 );

nDBType = MyKey.GetRegDWordValue( "HKEY_LOCAL_MACHINE" , "SOFTWARE// MyApp " , "DBType" , 0 );

strDBFile = MyKey.GetRegStrValue( "HKEY_LOCAL_MACHINE" , "SOFTWARE// MyApp " , "DBFile" , "" );

nDBLoginMode     = MyKey.GetRegDWordValue( "HKEY_LOCAL_MACHINE" , "SOFTWARE// MyApp " , "DBLoginMode" , "" );

strDBName = MyKey.GetRegStrValue( "HKEY_LOCAL_MACHINE" , "SOFTWARE// MyApp " , "DBName" , "" );

strDBPassword = MyKey.GetRegStrValue( "HKEY_LOCAL_MACHINE" , "SOFTWARE// MyApp " , "DBPassword" , "" );

strDBServer   = MyKey.GetRegStrValue( "HKEY_LOCAL_MACHINE" , "SOFTWARE// MyApp " , "DBServer" , "" );

strDBUser = MyKey.GetRegStrValue( "HKEY_LOCAL_MACHINE" , "SOFTWARE// MyApp " , "DBUser" , "" );

 

    if( nDBVer < nNewDBVer )

    {

           if( ( nDBType == 0 && strDBFile != "" ) ||(nDBType == 1 && strDBName != "" ) )

           {

                  Install.SetVarTabValue( "UpdateDB" ,"1" );

                  Install.SetVarTabValue( "VAR_S_DBTYPE" ,nDBType );

                  Install.SetVarTabValue( "VAR_S_DBFILE" ,strDBFile );

                  Install.SetVarTabValue( "VAR_S_DBNAME" ,strDBName );

                  Install.SetVarTabValue( "VAR_S_DBLOGINMODE" ,nDBLoginMode );

                  Install.SetVarTabValue( "VAR_S_DBPASSWORD" ,strDBPassword );

                  Install.SetVarTabValue( "VAR_S_DBSERVER" ,strDBServer );

                  Install.SetVarTabValue( "VAR_S_DBUSER" ,strDBUser );

           }

       }

 

       Install.SetVarTabValue( "DBVer" ,nNewDBVer );

       Install.DoDialog( "SdProcess" );

}

 

function void OnEnd()

{

       var string strPath;

 

       if( Install.GetSetupState() == SS_INSTALL )

       {

              if( Install.GetSetupMode() == SM_REPAIR )

              {

                     Install.StartService( "MyServer" );

              }

              Install.DoDialog( "SdFinish" );

             

              if( Install.UpdateModeStr != "SM_REPAIR" )

              {

                     strPath = Install.GetPath("PATH_S_TARGETDIR");

                     strPath = strPath + "//help//MyAppHelp.chm";

                     Install.ShellExec( strPath );

              }

    }

     else if( Install.GetSetupState() == SS_INSTALL_REBOOTDO )

           Install.DoDialog( "SdRebootDo" );

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值