這東東在網上找了很久,要麼不全,要麼不是自己想要的,後來自己摸索終於搞定,貼出來,請大家幫我看看是不是還存在缺陷
//全域變數
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;