//停止和刪除已安裝的服務程序
void removeService()
{
SC_HANDLE schService;
SC_HANDLE schSCManager;
//打開服務管理數據庫
schSCManager=OpenSCManager(
NULL, //本地計算機
NULL, //默認的數據庫
SC_MANAGER_ALL_ACCESS //要求所有的訪問權
);
if(schSCManager)
{
//獲取服務程序句柄
schService=OpenService(
schSCManager, //服務管理數據庫句柄
TEXT(SZSERVICENAME), //服務名
SERVICE_ALL_ACCESS //響應所有的訪問請求
);
if(schService)
{
//試圖停止服務
if(ControlService(
schService, //服務程序句柄
SERVICE_CONTROL_STOP, //停止服務請求碼
&ssStatus //接收最后的服務狀態信息
))
{
_tprintf(TEXT("Stopping %s."),TEXT(SZAPPNAME));
Sleep(1000);
//等待服務停止
//
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));
}
//刪除已安裝的服務程序安裝
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());
}
|