`
CanBeatle
  • 浏览: 168739 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

C#创建Windows Service

    博客分类:
  • C#
阅读更多

前段时间公司的一个项目用到Windows Service,主要用来在Event log 中记录客户端做的一些操作。现整理如下:

1. .net中直接就可以创建Windows Service项目,我使用的是C#,例如:创建一个MyTCPTestWindowsService的工程,重命名Service1.cs为MyTCPTestService.cs,双击该文件,在其设计界面拖入一个System.Diagnostics.EventLog控件,在该控件的属性面板中,将Log改为MyTCPTestSourceLog,Source改为MyTCPTestLogSource。

2. 单击属性面板下面灰色区域中的“添加安装程序”链接。默认情况下,向项目中添加包含两个安装程序的组件类。将该组件命名为ProjectInstaller,它包含的安装程序分别是服务的安装程序和服务关联进程的安装程序。  

3. 在MyTCPTestService.Designer.cs代码的方法private void InitializeComponent()增加this.ServiceName = "MyTCPTestService"; 为自己的Service命名。

4. 查看MyTCPTestService.cs的代码(右键选中-->查看代码) 

  Thread newThread;
        //TCP Listner for Socket
        public TcpListener tcpServer;
        //Creating a Network Stream
        public NetworkStream ns;
        //Creating a Stream reader
        public StreamReader sr;
        //Creating a Stream Writer
        public StreamWriter sw;
        //Creating a Socket
        public Socket sc;
        public string clientReq;


        public TCPTestService()
        {
            InitializeComponent();

            if (!System.Diagnostics.EventLog.SourceExists("MyTCPTestLogSource"))
            {
                System.Diagnostics.EventLog.CreateEventSource("MyTCPTestLogSource", "MyTCPTestSourceLog");
            }

            //Name of EventLog
            eventLog.Source = "MyTCPTestLogSource";
            eventLog.Log = "MyTCPTestSourceLog";
        }
 
		// The main entry point for the process
		static void Main()
		{
			System.ServiceProcess.ServiceBase[] ServicesToRun;
	        //New Service Created.
            ServicesToRun = new System.ServiceProcess.ServiceBase[] { new TCPTestService() };
            //Run the New Service.
			System.ServiceProcess.ServiceBase.Run(ServicesToRun);	
		}

        protected override void OnStart(string[] args)
        {
            tcpServer = new TcpListener(new IPEndPoint(IPAddress.Any, 8080));
            eventLog.WriteEntry("MyTCPTestServerService started");
            newThread = new Thread(new ThreadStart(ThreadFunction));
            newThread.IsBackground = true;
            newThread.Start();
        }

        protected override void OnStop()
        {
            eventLog.WriteEntry("MyTCPTestServerService stopped");
            newThread.Abort();
        }

        /// <summary>
        /// Continue this service.
        /// </summary>
        protected override void OnContinue()
        {
            eventLog.WriteEntry("MyTCPTestServerService is continuing in working");
        }

其中,TCPTestService()里面后面的代码都是配置EventLog的。OnStart和OnStop方法是Service启动和停止的时候调用的方法,代码都很简单,只是简单的记录了日志。注意在OnStart中,我创建了一个后台执行的线程,该线程运行的时候会调用ThreadFunction方法,这个方法是自定义的:

  /// <summary>
        /// For Listening Socket.
        /// </summary>
        public void ThreadFunction()
        {
            tcpServer.Start(4);
            while (true)
            {
                sc = tcpServer.AcceptSocket();
                eventLog.WriteEntry(" Client Respose Received");
                try
                {
                    if (sc.Connected)
                    {
                        try
                        {
                            ns = new NetworkStream(sc);
                            sr = new StreamReader(ns);
                            sw = new StreamWriter(ns);
                            clientReq = sr.ReadLine();
                        }
                        catch (OutOfMemoryException ex)
                        {
                            eventLog.WriteEntry("Problem occur while reading stream:-" + ex.Message);
                            eventLog.WriteEntry("MyTCPTestServerService is Stopping");
                            OnStop();
                        }
                        catch (IOException ex)
                        {
                            eventLog.WriteEntry("Problem occur while intializing network stream:-" + ex.Message);
                            eventLog.WriteEntry("MyTCPTestServerService is Stoping");
                            OnStop();
                        }
                        eventLog.WriteEntry("Current Command:" + clientReq);
                    }
                }
                catch (IOException ex)
                {
                    eventLog.WriteEntry("Exception occur in the service:-" + ex.Message);
                    sw.WriteLine("Stop");
                }
                try
                {
                    sw.Close();
                    sr.Close();
                    ns.Close();
                    sc.Close();
                    clientReq = null;
                    eventLog.WriteEntry(" Request completed");
                }
                catch (IOException ex)
                {
                    eventLog.WriteEntry("Problem occur while closing the socket:-" + ex.Message);
                    eventLog.WriteEntry("MyTCPTestServerService is Stoping");
                    OnStop();
                }
            }
        }

  在该方法中,创建了一个TCPListener,监听8080端口,读取该端口接受的数据,并记录在定义好的Event Log中。

5. 修改工程属性窗口的Start project。 

ok,Service的代码已经完毕,下一篇(http://canbeatle.iteye.com/blog/698442)将介绍怎样制作安装项目。

  • 大小: 28.2 KB
  • 大小: 25.5 KB
  • 大小: 33.2 KB
分享到:
评论

相关推荐

    C#创建Windows Service(Windows 服务)demo

    **一、C#创建Windows Service** 首先,我们需要创建一个新的C#项目,并选择“安装”类库模板,这将为我们生成一个基础的Windows Service结构。关键的类是`ServiceBase`,它是所有Windows服务的基类。你需要继承这个...

    c#创建windows service示例以及在asp.net中如何控制windows service

    在本文中,我们将探讨如何使用C#创建Windows服务,并在ASP.NET中对其进行控制。Windows服务是一种在后台运行的应用程序,它们通常用于执行特定的任务,如定时任务、系统监控或其他需要在用户无交互情况下运行的长期...

    使用C#创建WindowsService(Windows服务,附源码):定期执行Dos命令或Bat(批处理)文件

    服务名:epAgentService 运行环境:Framework2.0 文件说明: install.bat 安装服务 UnInstall.bat 删除服务 config.ini 配置文件 配置文件说明: [settings] batPath BAT文件路径,例:d:\1.bat ...

    C#创建windows服务/写wvebServer 接口

    本文将深入探讨如何使用C#来创建Windows服务,并构建一个Web服务器接口。这些技术对于系统集成、后台处理以及网络通信至关重要。 首先,让我们了解Windows服务。Windows服务是在操作系统后台运行的独立程序,它们不...

    用C#创建WindowsService

    打开VS2005,点击File-&gt;New-&gt;Project….,在创建工程向导中选择Windowsservice模板,如下图所示:在工程名输入框中,输入TestService然后点击OK。VS为我们生成了最基本的代码,我们将Service的名称改为我们期望的名称...

    C#创建Windows服务

    总结来说,使用C#创建Windows服务涉及以下几个关键步骤: 1. 引用`System.ServiceProcess`命名空间。 2. 创建一个继承自`ServiceBase`的类,重写`OnStart`和`OnStop`方法。 3. 实现安装程序类,使用`...

    C#发现之旅 --- C#开发Windows Service程序)

    1. **创建Windows Service项目**:在Visual Studio中选择创建新的Windows Service项目。 2. **编写ServiceBase的派生类**:创建一个继承自ServiceBase的类,在其中实现服务的启动、停止等逻辑。 3. **安装服务**:将...

    C#开发WindowsService程序源码加文档.pdf

    本资源"**C#开发WindowsService程序源码加文档.pdf**"聚焦于使用C#语言编写Windows服务的实践教程,包含源码与详细文档,对于想要深入理解和开发此类应用的开发者来说,是一份非常有价值的参考资料。 首先,我们来...

    C#创建Windows服务简单实例

    下面将详细介绍如何使用C#来创建一个简单的Windows服务。 首先,你需要在Visual Studio中创建一个新的项目。选择"Windows服务"模板,这会为你提供一个基本的服务框架。项目创建后,你将看到主要的代码文件`Service1...

    C#创建Windows服务(Windows Services) 实战之系统定时重启服务-程序开发

    ### C# 创建 Windows 服务:实现系统定时重启功能 在 IT 领域,Windows 服务(Windows Services)是后台运行的应用程序,它们为用户提供了一系列关键功能,如网络连接、打印服务等。与传统的应用程序不同,Windows ...

    C#构建WindowsService及教程(已测试可用)

    C#作为.NET框架的主要编程语言,非常适合用来创建Windows服务。本教程将深入探讨如何使用C#来构建Windows服务,并提供已测试的实现代码。 首先,要创建一个Windows服务,我们需要使用System.ServiceProcess命名空间...

    C# VS 2010 创建、安装、调试 windows服务(windows service)

    **创建Windows服务** 1. 启动Visual Studio 2010,选择"文件" -&gt; "新建" -&gt; "项目"。 2. 在项目模板中,选择".NET Framework 4",然后找到"Windows服务"模板,为项目命名并点击"确定"。 3. 在新生成的项目中,主要的...

    C#创建windows服务+Form+Web调用服务

    综上所述,这个项目涵盖了从开发到部署的多个环节,包括使用C#创建Windows服务,通过Form与服务交互,以及设计一个Web接口让外部应用能够调用该服务。通过这样的实践,开发者可以深入理解如何在.NET环境中构建分布式...

    C# 创建windows服务源码

    总结,C#创建Windows服务涉及多个步骤,包括定义服务类、编写安装程序、安装服务和管理服务状态。通过理解这些概念和使用相应的.NET Framework类,开发者能够轻松地创建和维护Windows服务,满足各种后台任务的需求。...

    C#创建Windows系统服务及实例工程

    通过掌握C#创建Windows服务的方法,开发者可以构建更健壮、自动化程度更高的后台解决方案。 总的来说,C#为创建Windows服务提供了一套强大的工具和API。通过深入学习和实践,你可以更好地理解和利用这一特性,提升...

    使用C#创建Windows服务 并发布Windows 服务.docx

    ### 使用C#创建Windows服务及发布Windows服务 #### 一、开发环境配置 为了确保能够顺利地进行Windows服务的开发与部署,首先需要准备好合适的开发环境。本案例中所使用的开发环境包括: - **操作系统**:Windows ...

    C#创建Windows服务(代码+说明文档)

    提供的压缩包“C#创建Windows服务(代码+说明文档)”应该包含了更详细的步骤和实例代码,可以帮助你更好地理解和实践这个过程。通过深入学习和实践,你可以轻松地为自己的系统构建定制化的Windows服务。

    C# windows服务实例(C#发现之旅 --- C#开发Windows Service程序)

    在“C#发现之旅 --- C#开发Windows Service程序”中,我们将深入探讨如何利用C#来创建和管理这样的服务。这个实例是根据提供的PDF教程编写的,确保了代码的有效性和实用性。现在,让我们详细了解一下Windows服务以及...

Global site tag (gtag.js) - Google Analytics