用Installshield 12 检测是否安装MS SQL Server或MSDE

本文介绍了一种检查并自动安装 Microsoft SQL Server 或 MSDE 的方法,包括获取数据库服务器名称、路径及启动参数的过程,并确保数据库服务正常启动。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这东东在网上找了很久,要么不全,要么不是自己想要的,后来自己摸索终于搞定,贴出来,请大家帮我看看是不是还存在缺陷

//全局变量
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;

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值