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;