//停止和刪除已安裝的服務(wù)程序
void removeService()
{
SC_HANDLE schService;
SC_HANDLE schSCManager;
//打開(kāi)服務(wù)管理數(shù)據(jù)庫(kù)
schSCManager=OpenSCManager(
NULL, //本地計(jì)算機(jī)
NULL, //默認(rèn)的數(shù)據(jù)庫(kù)
SC_MANAGER_ALL_ACCESS //要求所有的訪問(wèn)權(quán)
);
if(schSCManager)
{
//獲取服務(wù)程序句柄
schService=OpenService(
schSCManager, //服務(wù)管理數(shù)據(jù)庫(kù)句柄
TEXT(SZSERVICENAME), //服務(wù)名
SERVICE_ALL_ACCESS //響應(yīng)所有的訪問(wèn)請(qǐng)求
);
if(schService)
{
//試圖停止服務(wù)
if(ControlService(
schService, //服務(wù)程序句柄
SERVICE_CONTROL_STOP, //停止服務(wù)請(qǐng)求碼
&ssStatus //接收最后的服務(wù)狀態(tài)信息
))
{
_tprintf(TEXT("Stopping %s."),TEXT(SZAPPNAME));
Sleep(1000);
//等待服務(wù)停止
//
while(QueryServiceStatus(schService,&ssStatus))
{
if(SERVICE_STOP_PENDING==ssStatus.dwCurrentState)
{
_tprintf(TEXT("."));
Sleep(1000);
}
else
break;
}
if(SERVICE_STOPPED==ssStatus.dwCurrentState)
_tprintf(TEXT("\n %s stopped. \n"),TEXT(SZAPPNAME));
else
_tprintf(TEXT("\n %s failed to stopp. \n"),TEXT(SZAPPNAME));
}
//刪除已安裝的服務(wù)程序安裝
if(DeleteService(schService))
_tprintf(TEXT("%s removed. \n"),TEXT(SZAPPNAME));
else
_tprintf(TEXT("DeleteService failed - %s. \n"), GetLastError());
CloseServiceHandle(schService);
}
else
_tprintf(TEXT("OpenService failed - %s \n"),GetLastError());
CloseServiceHandle(schSCManager);
}
else
_tprintf(TEXT("OpenSCManager failed - %s \n"),GetLastError());
}
|