Windows服务的创建

来源:互联网 发布:金牛趋势软件 编辑:程序博客网 时间:2024/05/07 18:44

ServiceBase : 为将作为服务应用程序的一部分而存在的服务提供基类。在创建新的服务类时,必须从 ServiceBase 派生。

创建一个项目,命名为SrvMon

从工具箱中添加组件:
dateTimePicker
serviceController:
    属性:    ServiceName = "SrvMon"
eventLog:
    属性:    Log = "MyNewLog"
        Source = "MySource"

右键 → 添加安装程序:
serviceInstaller:
    属性:    ServiceName = "SrvMon"
        StartType : Automatic(自动),Manual(手动),Disabled(禁用)
serviceProcessInstaller:
    属性:    Account(启动服务的类型) = "LocalSystem"(当前用户)

SrvMon.cs:
    属性:    ServiceName = "SrvMon"(服务的名字)
        AutoLog = false(写入事件)
        CanPauseAndContinue = true(可以暂停和继续)
        CanStop = true(可以停止)

添加代码:
protected override void OnStart(string[] args)
{
    // TODO: 在此处添加代码以启动服务。
    StreamWriter swr;
    try
    {
        swr = File.AppendText(@"C:/srvLog.txt");
    }
    catch (Exception)
    {
        this.eventLog1.WriteEntry("文件没有找到");
        return;
    }

    swr.WriteLine("本次启动的时间:" + dateTimePicker1.Value.ToString());
    ServiceController[] services = ServiceController.GetDevices();
    foreach (ServiceController service in services)
    {
        swr.WriteLine("名称:" + service.ServiceName);
        swr.WriteLine("类型:" + service.ServiceType);
        swr.WriteLine("绑定名:" + service.DisplayName);
    }
    swr.Flush();
    swr.Close();
}

protected override void OnStop()
{
    // TODO: 在此处添加代码以执行停止服务所需的关闭操作。
    StreamWriter swr;

    try
    {
        swr = File.AppendText(@"C:/srvLog.txt");
    }
    catch
    {
        eventLog1.WriteEntry("文件没有找到");
        return;
    }

    swr.WriteLine("本次结束时间:" + dateTimePicker1.Value.ToString());
    swr.Flush();
    swr.Close();
}

进入visual studio 2005命令提示窗口:
跳转到工程bin目录下,输入命令:installutil srvmon.exe

卸载服务:
跳转到工程bin目录下,输入命令:installutil srvmon.exe /u

Windows服务应用程序体系结构:
1、FrameWork对Windows服务的支持
①名称空间:System.ServiceProcess
②包括的类
–ServiceBase:所有Windows服务的基类
–ServiceController:该类的一个实例代表着一个具体的Windows服务
–ServiceControllerPermission:用与控制ServiceController的使用权限
–ServiceInstaller:用于执行对Windows服务的安装
–ServiceProcessInstaller:用于执行对Windows服务的安装.与以上类不同的是,该类代表一个可以执行的Windows服务进程.Windows服务进程可以通过Windows任务管理器进行控制.
–TimeOutException:提供对Windows服务超时服务时异常处理的机制

2.ServiceBase类
①ServiceBase类是所有Windows服务的基类。我们编写Windows服务时都要从这个类派生自己的类
②ServiceBase的方法
– Run()运行一个Windows服务
– OnContinue()继续执行服务
– OnCustomCommand()向Windows服务发出自定义指令
– OnPause()暂停正在运行的Windows服务
– OnPowerEvent当计算机的电源状态改变时调用
– OnShutDown()当系统关闭时调用OnStart()开始一个Windows服务
– OnStop()结束一个Windows服务
③ServiceBase属性:
AutoLog 表示是否将开始、结束、暂停、继续等指令写入事件日志
CanHandlePowerEvent 表示该服务是否支持电源事件功能
CanPauseAndContinue 表示该服务是否支持暂停和继续功能
CanShutdown 表示该服务是否支持关闭功能
CanStop 表示该服务是否支持结束功能
EventLog 应用程序的时间日志
ServiceName 该服务的名称

3.ServiceController:
①服务控制器,用于控制Windows服务的各种具体行为.它既可以控制本地的Windows服务,又可以控制远程的Windows服务.
②ServiceController的方法
–GetDivices()得到一台计算机上的设备驱动器服务
–GetServices()得到一台计算机上的非设备驱动器服务
–Close()用于断开服务连接,并且释放服务控制器所占用的全部资源
–Continue()继续被暂停的服务
–ExcuteCommand()对服务执行一条自定义指令
–Pause()暂停服务
–Refresh()将所有属性更新
–Start()启动服务
–Stop()停止服务
–WaitForStatus()等待服务达到指定的状态
③ServiceController的属性
–CanPauseAndContinue表示服务是否可以被停止
–CanShutDown表示服务在系统关闭时是否可以得到通知CanStop表示服务是否可以被停止
–DependentServices表示与服务相关联的设备
–DisplayName表示服务控制器所绑定的名称
–MachineName表示该服务所在的计算机名称
–ServiceName表示所绑定的服务的名称
–ServiceType表示控制器所引用的服务的类型
–ServicesDependedOn表示服务所依赖的服务集合Status表示控制器所引用的服务的状态

4.ServiceInstaller类
①用于安装从ServiceBase继承的Windows服务
②ServiceInstaller的属性:
– DisplayName显示名称
– ServiceName标识服务名称,这个名称必须与Installer将要安装的Windows服务名称相同
– ServiceDependOn服务所要用到的其服务名称的一个数组
– StartType表示所安装的服务的启动特性。可以为Automatic,Manual,Disable。默认为Manual。
③ServiceInstaller类的事件
AfterInstaller()调用Install方法后发生
AfterRollback()调用Rollback方法后发生
AfterUninstall()调用UnInstall方法后发生
BeforeInstall()调用Install方法前发生
BeforeRollback()调用Rollback方法前发生
BeforeUninstall()调用UnInstall方法前发生
Committed()调用Commit方法后发生
Committing()调用Commit方法前发生

5.ServiceProcessInstaller类
①用于安装从ServiceBase继承的Windows服务。它与一个可执行程序中的所有服务所作的工作基本相同
②ServiceProcessInstaller的属性:
– Account运行服务的当前用户帐号
– HelpText在服务安装选项中给出的帮助信息
– Password运行服务的当前用户帐号的密码
– Username运行服务的当前用户帐号的用户名
③ServiceProcessInstaller的事件(类似ServiceInstaller )

原创粉丝点击