使用C#开发自定义windows服务是一件十分简单的事。那么什么时候,我们需要自己开发windows服务呢,就是当我们需要计算机定期或者一 直执行我们开发的某些程序的时候。我经常看到许多人开发的windows服务安装卸载都是使用cmd命令来进行的,我觉得这样的话,部署起来比较麻烦,于是就考虑做了一个可视化的windows控制程序,方便,快捷。

     这里我以一个WCF的监听服务为例,因为我是做一个局域聊天室,需要服务器端监听终端,所以我就开发了一个服务,以便控制此监听服务。然而,我们开发的windows服务,默认情况下是无法可视化的操作的,这里我就额外的开发一个工具来对此服务进行操作,效果图如下:
C#开发可以可视化操作的windows服务

开发步骤

1、“新建项目”——“Window服务”
C#开发可以可视化操作的windows服务
Program.cs代码:

    using System;  
    using System.Collections.Generic;  
    using System.Linq;  
    using System.Text;  
    using System.ServiceModel;  
    using System.ServiceModel.Description;  
    using System.ServiceProcess;  
      
    namespace MSMQChatService  
    {  
        class Program  
        {  
            static void Main()  
            {  
                #region 服务启动入口,正式用  
      
                ServiceBase[] ServicesToRun;  
                ServicesToRun = new ServiceBase[] {  new MQChatService()  };  
                ServiceBase.Run(ServicesToRun);  
     
                #endregion  
            }  
        }  

MQChatService.cs代码如下:

    protected override void OnStart(string[] args)  
            {  
                //开启服务  这里就是你想要让服务做的操作  
                StartService();  
            }  

3、切换到MQChatService的可视化界面
C#开发可以可视化操作的windows服务

4、在可视化界面,单击鼠标右键,
C#开发可以可视化操作的windows服务

将会出现一个Installer为后缀的新界面,默认好像是Project Installer.cs,我这里将其重命名为ServiceInstaller.cs
C#开发可以可视化操作的windows服务

分别对界面上这两个组件进行属性配置,具体的属性签名可以查看属性面板的最下面(右下角处)

C#开发可以可视化操作的windows服务

好了,我们的windows服务已经开发好了,接下来就开发一个可视化的控制器,来控制服务的安装、卸载、启动和停止。

1、  新建一个windows程序,名称ServiceSetup,Form1重命名为FrmServiceSetup,
C#开发可以可视化操作的windows服务

界面控件如下:

C#开发可以可视化操作的windows服务

Program.cs代码如下:

    using System;  
    using System.Collections.Generic;  
    using System.Diagnostics;  
    using System.Linq;  
    using System.Threading;  
    using System.Threading.Tasks;  
    using System.Windows.Forms;  
      
    namespace ServiceSetup  
    {  
        static class Program  
        {  
            /// <summary>  
            /// 应用程序的主入口点。  
            /// </summary>  
            [STAThread]  
            static void Main()  
            {  
                 //获取欲启动进程名  
                string strProcessName = System.Diagnostics.Process.GetCurrentProcess().ProcessName;  
                ////获取版本号  
                //CommonData.VersionNumber = Application.ProductVersion;  
                //检查进程是否已经启动,已经启动则显示报错信息退出程序。  
                if (System.Diagnostics.Process.GetProcessesByName(strProcessName).Length > 1)  
                {  
                    MessageBox.Show("程序已经运行。");  
                    Thread.Sleep(1000);  
                    System.Environment.Exit(1);  
                }  
                else  
                {  
                    Application.EnableVisualStyles();  
                    Application.SetCompatibleTextRenderingDefault(false);  
                    Application.Run(new FrmServiceSetup());  
                }  
            }  
        }  
    }  
View Code

相关文章:

  • 2021-08-14
  • 2021-08-24
  • 2021-12-11
  • 2022-12-23
  • 2021-09-04
  • 2022-12-23
  • 2021-09-18
  • 2021-05-27
猜你喜欢
  • 2022-01-07
  • 2022-12-23
  • 2022-12-23
  • 2021-06-29
相关资源
相似解决方案