• Windows Service开发介绍


    创建服务

    1、选择新建->项目->Windows桌面,选择Windows服务。

    2、输入名称,单击"确定"。
    注意事项:如果在模板中没有Windws服务,可能是未安装.NET桌面开发,可以通过选择左下角打开Visual Studio选择安装程序,选择.NET桌面开发安装。

    重命名服务

    1、服务创建好,默认名称是Service1.cs,根本实际业务改为匹配的名称,修改名称过程中,会提示"即将重命名文件。是否也对此项目中对代码元素“Service1”的所有引用执行重命名操作?",点击"是"。

    2、双击服务,在"设计"视图中,右击"属性",在属性窗口中把ServiceName的值更改为刚才修改的名字。

    编写业务

    在"设计"视图中,点击"切换到代码视图",可以看到,此类继承了ServiceBase
    代码默认重写有OnStart和OnStop两个方法,用于启动和停止服务对组件的处理。

            /// <summary>
            /// 启动
            /// </summary>
            /// <param name="args"></param>
            protected override void OnStart(string[] args)
            {
                Log4netHelper.Info("Demo Service启动");
                // TODO 业务处理
            }
    
            /// <summary>
            /// 停止
            /// </summary>
            protected override void OnStop()
            {
                Log4netHelper.Info("Demo Service停止");
            }
    

    还可以重写 OnPause、OnContinue 和 OnShutdown 方法来定义对组件的其他处理。
    支持通过EventLog写入事件日志,需要在"serviceProcessInstaller1"中的Account设置为LocalSystem。
    注意事项:不推荐使用此帐户,因为权限过大,推荐使用LocalSerice帐户。

    轮询

    通过Timer组件来实现此功能。
    示例:

            /// <summary>
            /// 启动
            /// </summary>
            /// <param name="args"></param>
            protected override void OnStart(string[] args)
            {
                Log4netHelper.Info("Demo Service启动");
                Timer timer = new Timer();
                timer.Interval = 60000; // 60 秒
                timer.Elapsed += new ElapsedEventHandler(this.OnTimer);
                timer.Start();
            }
    
            /// <summary>
            /// 定时器事件
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="args"></param>
            public void OnTimer(object sender, ElapsedEventArgs args)
            {
                // TODO 业务处理
                Log4netHelper.Info("Timer执行");
            }
    

    添加安装程序

    1、添加安装程序

    双击服务名称,在"设计"视图中右击,选择添加安装程序。

    Visual Studio会向项目中添加一个名为ProjectInstaller组件,其中会包含两个安装程序。

    2、配置安装程序

    在ProjectInstaller的"设计"视图中,选择"serviceProcessInstaller1",右击选择属性,配置参数:

    1. Account设置为LocalService。

    在ProjectInstaller的"设计"视图中,选择"serviceInstaller1",右击选择属性,配置参数:

    1. Account设置为LocalService。
    2. Description设置服务描述,此描述在"服务"窗口描述列显示。
    3. DisplayName设置为Demo服务,此名称可以不同于ServiceName属性,它是系统使用的名称,此名称在"服务"窗口名称列显示。
    4. ServiceName设置为DemoService,和服务类名称保持一致。
    5. StartType设置为Automatic,自启动。

    3、添加自启动程序

      在StartType设置为Automatic,并不能达到程序安装后启动,需要在`ProjectInstaller.cs`中增加代码。
    
           /// <summary>
            /// Ctor
            /// </summary>
            public ProjectInstaller()
            {
                InitializeComponent();
                // 安装后自启动
                this.Committed += new InstallEventHandler(ProjectInstaller_Committed);
            }
    
            /// <summary>
            /// 安装后发生事件,启动服务
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void ProjectInstaller_Committed(object sender, InstallEventArgs e)
            {
                System.ServiceProcess.ServiceController controller = new System.ServiceProcess.ServiceController("DemoService");
                controller.Start();
            }
    

    注意事项:ServiceController构造函数接收向系统标识该服务的名称, 也可以是服务的显示名称。

    安装服务

    使用InstallUtil.exe安装,启用Cmd或Windows PowerShell输入安装命令。
    注意事项:Cmd或Windows PowerShell必须使用管理员模式打开。

    1、安装

    1. 32位.NET Framework4或4.5以及更高版本。
      安装:

      C:WindowsMicrosoft.NETFrameworkv4.0.30319InstallUtil.exe 文件所在完整路径DemoService.exe
      

      卸载:

      C:WindowsMicrosoft.NETFrameworkv4.0.30319InstallUtil.exe /u 文件所在完整路径DemoService.exe
      
    2. 64位.NET Framework4或4.5以及更高版本。
      安装:

      C:WindowsMicrosoft.NETFramework64v4.0.30319InstallUtil.exe 文件所在完整路径DemoService.exe
      

      卸载:

      C:WindowsMicrosoft.NETFramework64v4.0.30319InstallUtil.exe /u 文件所在完整路径DemoService.exe
      

    2、效果

    调试

    由于服务的特殊性,无法直接启动调试,可以通过附加进行的方式进行调整。

    1、附加进程

    通过Visual Studio"调试"选择"附加到进程"。

    2、选择服务进程

    在进程中找到对应的服务。

    3、效果


    注意事项:
    1、附加进程调试,Visual Studio必须以管理员权限打开。
    2、如果在附加进程中看不到服务,确认"显示所有用户的进程"是否已勾选。
    3、服务正常运行时,程序重新编译会失败,必须停止服务才能编译。

  • 相关阅读:
    mysql删除重复数据
    Spring缓存注解
    Spring事物不回滚
    java.net.MalformedURLException: no protocol: www.baidu.com
    shred:减少删除文件的还原度
    rm命令防止误操作
    软链接:要根据软链接来写路径
    linux与windows文本文件间的转换:针对回车换行
    cat:文本编辑工具
    算术运算;赋值
  • 原文地址:https://www.cnblogs.com/LeeYongze/p/13865118.html
Copyright © 2020-2023  润新知