功能说明:安装盘在安装过程中判断当前数据库的版本号,如果版本号少于当前安装盘的版本号,则升级数据库。
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 不执行。
3.创建升级数据库库的 XML 数据
选择 [工具]->[数据库信息倒入/到出] 生成更新数据库的 XML 信息。
4.把最新的数据库版本号写到注册表中
把 Software/Myapp 下的 DBVer 与变量表中的变量 DBVer 进行关联,则我们中只要在脚本中设置这个变量值,就可以把这个值写到注册表中。
Install.SetVarTabValue( "DBVer" ,nNewDBVer );
5.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 + "[url=file:help//MyAppHelp.chm]//help//MyAppHelp.chm[/url]";
Install.ShellExec( strPath );
}
}
else if( Install.GetSetupState() == SS_INSTALL_REBOOTDO )
Install.DoDialog( "SdRebootDo" );
}
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 不执行。
3.创建升级数据库库的 XML 数据
选择 [工具]->[数据库信息倒入/到出] 生成更新数据库的 XML 信息。
4.把最新的数据库版本号写到注册表中
把 Software/Myapp 下的 DBVer 与变量表中的变量 DBVer 进行关联,则我们中只要在脚本中设置这个变量值,就可以把这个值写到注册表中。
Install.SetVarTabValue( "DBVer" ,nNewDBVer );
5.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 + "[url=file:help//MyAppHelp.chm]//help//MyAppHelp.chm[/url]";
Install.ShellExec( strPath );
}
}
else if( Install.GetSetupState() == SS_INSTALL_REBOOTDO )
Install.DoDialog( "SdRebootDo" );
}