这东东在网上找了很久,要么不全,要么不是自己想要的,后来自己摸索终于搞定,贴出来,请大家帮我看看是不是还存在缺陷
//全局变量
STRING szSQLServiceName; //数据库服务器名
STRING szSQLServiceName1; //数据库服务器名(缓存)
STRING szSQLServiceFilePath; //数据库服务器执行文件路径
STRING szSQLServiceDataRootPath; //数据库服务器数据库根路径
STRING szSQLServiceFileRootPath; //数据库服务器文件根路径
STRING szStartServiceArgs; //启动参数总和
STRING szSQLServiceRunData0 ; //数据库服务器启动参数1
STRING szSQLServiceRunData1 ; //数据库服务器启动参数2
STRING szSQLServiceRunData2 ; //数据库服务器启动参数3
NUMBER szServiceState; //数据库服务启动状态
//安装开始时检查
function OnBegin()
STRING szMsg;
STRING sKey,sKeyArg,sValue,sData;
STRING szKey;
NUMBER nType, nSize;
NUMBER nResult;
STRING szWaitTxt;
begin
if !MAINTENANCE then
SdShowMsg("正在检查软件运行环境...请稍候",TRUE);
Delay(1);
// 判断系统是否安装Microsoft SQL Server或MSDE
sKey = "Software//Microsoft//Microsoft SQL Server";
szMsg = "Micorsoft SQL Server 或 MSDE没有安装,请先安装Micorsoft SQL Server 或 MSDE.";
RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);
nResult = RegDBGetKeyValueEx ( sKey, "InstalledInstances", nType, sData, nSize );
if ( nResult < 0 )then
SdShowMsg("正在安装MSDE2000,请稍等...",TRUE);
Delay(1);
if(LaunchAppAndWait("msde//setup.exe", "",LAAW_OPTION_WAIT|LAAW_OPTION_MAXIMIZED)< 0) then
SdShowMsg("",FALSE);
MessageBox("安装MSDE2000失败,请手动执行安装光盘MSDE目录下的setup.exe安装MSDE2000引擎./n如仍无法解决,请联系系统供应商!",SEVERE);
abort;
endif;
endif;
//获取服务器名称
nResult=RegDBGetKeyValueEx( sKey, "InstalledInstances", nType, szSQLServiceName1, nSize );
if(nResult < 0) then
//MessageBox ("获取数据库服务器名称失败!",INFORMATION);
szSQLServiceName="MSSQL" ;
else
if(szSQLServiceName1="") then
szSQLServiceName="MSSQL";
elseif(szSQLServiceName1!="MSSQLSERVER") then
szSQLServiceName="MSSQL$"+szSQLServiceName1;
else
szSQLServiceName=szSQLServiceName1;
endif;
endif;
//获取数据库文件根路径
if(szSQLServiceName1!="MSSQLSERVER") then
sKey="Software//Microsoft//Microsoft SQL Server//"+szSQLServiceName1+"//Setup";
else
sKey="Software//Microsoft//"+szSQLServiceName1+"//MSSQLServer//Setup";
endif;
RegDBGetKeyValueEx( sKey, "SQLDataRoot", nType, szSQLServiceDataRootPath, nSize ); //数据库根路径
RegDBGetKeyValueEx( sKey, "SQLDataRoot", nType, szSQLServiceFileRootPath, nSize ); //文件根路径
//数据库启动文件路径
szSQLServiceFilePath=szSQLServiceFileRootPath+"//Binn//sqlservr.exe";
//获取数据库服务器启动参数
if(szSQLServiceName1!="MSSQLSERVER") then
sKeyArg="Software//Microsoft//Microsoft SQL Server//"+szSQLServiceName1+"//MSSQLServer//Parameters";
else
sKeyArg="Software//Microsoft//"+szSQLServiceName1+"//MSSQLServer//Parameters";
endif;
RegDBGetKeyValueEx( sKey, "SQLArg0", nType, szSQLServiceRunData0, nSize );
RegDBGetKeyValueEx( sKey, "SQLArg1", nType, szSQLServiceRunData1, nSize );
RegDBGetKeyValueEx( sKey, "SQLArg2", nType, szSQLServiceRunData2, nSize );
szStartServiceArgs=" -c "+ szSQLServiceRunData0 +" "+szSQLServiceRunData1+" "+szSQLServiceRunData2;
//检测数据库服务是否启动
if(ServiceGetServiceState(szSQLServiceName, szServiceState)< ISERR_SUCCESS) then
//加载
ServiceAddService (szSQLServiceName, szSQLServiceName, szSQLServiceName, szSQLServiceFilePath, TRUE,szStartServiceArgs);
endif;
//启动数据库服务
if (ServiceStartService(szSQLServiceName,"")< ISERR_SUCCESS ) then
SdShowMsg("",FALSE);
SetDialogTitle ( DLG_MSG_INFORMATION, "数据库服务启动出错" );
MessageBox("数据库服务"+szSQLServiceName+"启动错误!请手动开启数据库服务后再执行软件安装程序。/n如仍无法解决,请联系系统供应商!",INFORMATION);
abort;
endif;
endif;
end;