用Installshield 12 檢測是否安裝MS SQL Server或MSDE

來源:互聯網
上載者:User

這東東在網上找了很久,要麼不全,要麼不是自己想要的,後來自己摸索終於搞定,貼出來,請大家幫我看看是不是還存在缺陷

//全域變數
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;

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.