手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>程序设计>C/C++>列表

WindowsNT下Service的编程

来源:互联网 作者:west263.com 时间:2008-02-23
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!

----参数lpServices指向ENUM_SERVICE_STATUS结构,用于存放返回的服务的名字和状态信息。
----参数cbBufSize返回参数lpServices的长度,以字节为单位。
----参数pcbBytesNeeded返回获取剩余的Service所需字节的个数。
----参数lpServicesReturned返回服务的个数。
----参数lpResumeHandle,当第一次调用时该参数为0,当该函数再次被调用以获取另外的信息时,该参数表示下一个被读的Service。
----函数返回值:函数执行成功则返回True,失败则返回False。
----值得注意的是通常情况下该函数返回的结果为FALSE,我们能够调用GetLastError()来获取进一步信息。因为一台机器上有多种服务存在,所以GetLastError()应为ERROR_MORE_DATA,此时应再次调用EnumServicesStatus函数以获取正确的Service列表。

----下面有一个用Delphi编的一个程式例子,用其他研发工具如VC,VB也可实现。程式运行时,单击按钮Button1枚举NT中的Service并显示在列表框ListBox1中。在ListBox1选中某个Service,单击按钮Button2则启动该Service,单击按钮Button3则停止该Service。

首先在Unit1.hpp中添加
#include <winsvc.hpp>
然后在Class Form1的Private中添加

SC_HANDLE hscmanager,hService;
TServiceStatus returnstatus;

以下是Unit1.cpp的内容:
/**************************************************************************
* 枚举NT系统当服务并启动或终止之。
* Edited by 黑山老妖
* 2002.8.9
****************************************************************************/

void __fastcall TForm1::Button1Click(TObject *Sender)
{
DWORD BytesNeeded,serviceReturned,resumeHandle;
bool returnflag;
TEnumServiceStatus lpservice[100];
TEnumServiceStatus service;
DWORD i,bytes;

ListBox1->Items->Clear();
returnflag=false;
resumeHandle=0;
hscmanager=OpenSCManager(NULL,NULL,SC_MANAGER_ENUMERATE_SERVICE);//打开service control manager database
if (hscmanager<0)
{
ShowMessage("无法打开service control manager database");
return;
}
returnflag=EnumServicesStatus(hscmanager,SERVICE_DRIVER,SERVICE_ACTIVE,&service,sizeof(service),&BytesNeeded,&serviceReturned,&resumeHandle);//枚举Service
if(!returnflag&&GetLastError()==ERROR_MORE_DATA)
{
bytes=BytesNeeded sizeof(TEnumServiceStatus);
EnumServicesStatus(hscmanager,SERVICE_DRIVER,SERVICE_ACTIVE,&lpservice[0],bytes,&BytesNeeded,&serviceReturned,&resumeHandle);
for(i=0;i<serviceReturned-1;i )
{
ListBox1->Items->Add(lpservice[i].lpServiceName);
}
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
int i;
for(i=0;i<ListBox1->Items->Count;i )
{
if(ListBox1->Selected[i])
{
hService=OpenService(hscmanager,PChar(ListBox1->Items->Strings[i].c_str()),SERVICE_ALL_ACCESS);//打开该Service
if(hService<0)
{
ShowMessage("无法打开该服务!");
return;
}
QueryServiceStatus(hService,&returnstatus);//查看该Service的状态
if(returnstatus.dwCurrentState==SERVICE_STOPPED)//假如该Service已停止则启动他
//SERVICE_STOPPED==1,SERVICE_RUNNING==4 老妖注。
{
if(StartService(hService,0,NULL))
ShowMessage("启动成功!");
else
ShowMessage("无法启动该服务!");
}
CloseServiceHandle(hService);//关闭该Service
}
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
int i;

for(i=0;i<ListBox1->Items->Count;i )
{
if(ListBox1->Selected[i])
{
hService=OpenService(hscmanager,PChar(ListBox1->Items->Strings[i].c_str()),SERVICE_ALL_ACCESS);//打开该Service
if(hService<0)
{
ShowMessage("无法打开该Service");
return;
}
QueryServiceStatus(hService,&returnstatus);//查看该Service的状态
if(returnstatus.dwCurrentState==SERVICE_RUNNING) //假如该Service正在运行则停止他
{
if(ControlService(hService,SERVICE_CONTROL_STOP,&returnstatus))
ShowMessage("成功停止!");
else
ShowMessage("无法停止该服务!");
}
CloseServiceHandle(hService);//关闭该Service
}
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
CloseServiceHandle(hscmanager);//关闭service control manager database
}
//---------------------------------------------------------------------------




文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

热点关注
IDC资讯 虚拟主机 域名注册 托管租用 vps主机 智能建站
网站运营 建站经验 策划盈利 搜索优化 网站推广 免费资源
网站联盟 联盟新闻 联盟介绍 联盟点评 网赚技巧
行业资讯 业界动态 搜索引擎 网络游戏 门户动态 电子商务 广告传媒
网络编程 Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术 Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷 Internet Explorer
网页制作 FrontPages Dreamweaver Javascript css photoshop fireworks Flash
程序设计 Java技术 C/C++ VB delphi
网络知识 网络协议 网络安全 网络管理 组网方案 Cisco技术
操作系统 Win2000 WinXP Win2003 Mac OS Linux FreeBSD
返回首页 |关于我们 | 联系我们 | 付款方式 | 创业联盟 | 价格总览 | 资讯中心 | 友情链接 | 网站地图 | 招贤纳士 | RSS