檢測SQL的InstallShield腳本 通用於最新的 12

 
//全局變量
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引擎. 如仍無法解決,請聯繫系統供應商!",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+"啓動錯誤!請手動開啓數據庫服務後再執行軟件安裝程序。如仍無法解決,請聯繫系統供應商!",INFORMATION);
            abort;
        endif;
    endif; 
end;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章