zoukankan      html  css  js  c++  java
  • 【翻译】在Visual C#中如何创建一个Windows服务的安装项目

     

    摘要

    本文描述了如何为Windows服务(以前命名为NT服务)来创建安装项目。为此,首先你必须先创建一个解决方案,包含一个简单的Windows服务项目,该项目实现写日志。然后你要添加一个安装项目到解决方案以实现安装Windows服务。最后,启动服务。你可以通过使用开始菜单中的管理工具文件夹中的服务项来启动服务。

    必要条件

    下面列表中列出了推荐的硬件、软件、网络结构和你必须安装的补丁:

    ·      Microsoft Windows 2000, Windows XP, Windows Server 2003, or a later Microsoft operating system with the .NET Framework installed

    ·      Microsoft Visual Studio .NET Enterprise, Microsoft Visual Studio .NET Enterprise Architect, Microsoft Visual Studio 2005, or Microsoft Visual Studio 2008

    本文假定你熟悉Windows服务。如果你对Windows服务不熟悉,请查看本文的参考中的第一个参考。

    本文同样假定你用来安装和运行服务的用户帐户必须具有安装和运行服务的权限,还要有访问事件日志的权限。

    创建一个Windows服务安装项目

    本节描述了如何来创建一个Window服务项目和如何来使用编译过的安装项目来安装Windows服务。

    创建Windows服务项目

    1.      启动Microsoft Visual Studio

    2.      文件菜单,指向新建,然后点击项目

    3.      点击项目类型下的Visual C#项目,然后点击模板下的Windows服务.

    注意 Visual Studio 2005 或者Visual Studio 2008, 展开项目类型下的Visual C#, 点击Windows, 然后点击模板下的 Windows 服务

    4.      名称文本框中输入LogWriterService,然后在位置文本框中输入C:\,点击确定

    5.      解决方案资源管理器中,右击Service1.cs,然后点击查看代码

    6.      OnStart事件处理程序中,使用下面的代码替换注释:

     EventLog.WriteEntry("My simple service started.");

    7.      解决方案资源管理器中,双击Service1.cs

    8.      代码编辑器窗口,右击设计视图,然后点击属性

    9.      在属性面板中,点击添加安装程序链接。

    10.   ServiceInstaller1的属性面板中,修改属性ServiceNameService1.

    11.   在代码编辑器窗口的设计视图中,点击ServiceProcessInstaller1

    12.   在属性面板中,修改Account属性为LocalSystemLocalServiceNetworkService只在Microsoft Windows XP可用)。

    使用编译过的安装项目来安装Windows服务

    在你完成上节中的配置Windows服务项目的步骤后,接下的步骤是添加部署项目来打包服务应用程序以实现Windows应用程序可以安装:

    1.       添加一个新的项目到你的项目。为此,执行以下步骤:

    a)       在解决方案资源管理器中,右击解决方案'LogWriterService' (1 个项目),指向添加,然后点击新建项目

    b)       点击项目类型下的安装和部署项目,然后点击模板下的安装项目

    c)        名称文本框中输入ServiceSetup

    d)       位置文本框中输入C:\,然后点击确定

    2.       告诉部署项目要打包什么。为此,执行以下步骤:

    a)       在解决方案资源管理器中,右击ServiceSetup,指向添加,然后点击项目输出

    b)       添加项目输出组对话框中,在项目下拉框中,点击LogWriterService

    c)        点击主输出,然后点击确定

    3.       为了修正安装,只主输出。要添加自定义操作,执行以下步骤:

    a)       在解决方案资源管理器中,右击ServiceSetup,指向视图,然后点击自定义操作

    b)       右击自定义操作,然后点击添加自定义操作

    c)        点击应用程序文件夹,然后点击确定

    d)       点击主输出来自LogWriterService(活动),然后点击确定

    注意主输出出现在安装提交回滚卸载下。

    4.       默认安装项目不包含在生成配置中。为了生成解决方案,使用下列方法的一个。

     方法1

    1.      右击LogWriterService,然后点击生成

    2.      右击ServiceSetup,然后点击生成

    方法2

    1.      生成菜单,点击配置管理器来生成整个解决方案。

    2.      点击来选择ServiceSetup生成复选框。

    3.      按下F7来生成整个解决方案。

    当解决方案被生成,你有了一个完成安装包,可以用来安装服务。

    5.       安装新生成的服务,右击ServiceSetup,然后点击安装

    6.       ServiceSetup对话框中,点击3下一步。注意当服务安装时进度条出现了。

    7.       当服务已经安装,点击关闭

    完整代码列表

    Service1.cs

    using System;

    using System.Collections;

    using System.ComponentModel;

    using System.Data;

    using System.Diagnostics;

    using System.ServiceProcess;

    namespace LogWriterService

    {

        public class Service1 : System.ServiceProcess.ServiceBase

        {

            /// <summary>

            /// Required designer variable.

            /// </summary>

            private System.ComponentModel.Container components = null;

            public Service1()

            {

                // The Windows.Forms Component Designer must have this call.

                InitializeComponent();

                // TODO: Add any initialization after the InitComponent call

            }

            // The main entry point for the process

            static void Main()

            {

                System.ServiceProcess.ServiceBase[] ServicesToRun;

     

                // More than one user service may run in the same process. To add

                // another service to this process, change the following line to

                // create a second service object. For example,

                //

                //   ServicesToRun = New System.ServiceProcess.ServiceBase[] {new Service1(), new MySecondUserService()};

                //

                ServicesToRun = new System.ServiceProcess.ServiceBase[] { new Service1() };

                System.ServiceProcess.ServiceBase.Run(ServicesToRun);

            }

            /// <summary>

            /// Required method for Designer support - do not modify

            /// the contents of this method with the code editor.

            /// </summary>

            private void InitializeComponent()

            {

                components = new System.ComponentModel.Container();

                this.ServiceName = "Service1";

            }

            /// <summary>

            /// Clean up any resources that are being used.

            /// </summary>

            protected override void Dispose(bool disposing)

            {

                if (disposing)

                {

                    if (components != null)

                    {

                        components.Dispose();

                    }

                }

                base.Dispose(disposing);

            }

            /// <summary>

            /// Set things in motion so your service can do its work.

            /// </summary>

            protected override void OnStart(string[] args)

            {

                EventLog.WriteEntry("My simple service started.");

            }

     

            /// <summary>

            /// Stop this service.

            /// </summary>

            protected override void OnStop()

            {

                // TODO: Add code here to perform any tear-down necessary to stop your service.

            }

        }

    }

     

    验证服务运行

    1.      在控制面板,双击管理工具,然后双击服务

    2.      右击Service1,然后点击开始

    3.      使用下列方法中的一个来验证事件被记录在事件日志中:

      方法1

    1.      在控制面板中,双击管理工具,然后双击事件查看器

    2.      点击左侧面板中的应用程序日志,然后从后侧面板中定位到你的服务的事件日志。

    方法2

    1.      服务器资源管理器中,展开服务器,展开电脑名称,展开事件日志,展开应用程序,然后展开Service1Service1是类的名称,不是服务本身。因此,Service1被用来作为应用程序名称。(解释如何来自定义名称超越了本文章的范围)

    2.      移动鼠标到日志节点。从上开始的第二个节点应该是“My simple service started”。

    疑难解答

    FrameworkSDK文档中说明如下:

    服务应用程序项目创建的编译可执行文件必须安装在服务器上,在项目能以有意义的方式工作之前。你不能通过按下F5或者F11的方式调试或者运行服务应用程序;你不能立即运行服务或者逐步执行代码。反而,你必须安装并启动服务,然后附加调试器到服务的进程。

    更多信息,请访问以下Microsoft Developer Network (MSDN) 网站:

    调试Windows服务应用程序http://msdn2.microsoft.com/en-us/library/aa984342(VS.71).aspx (http://msdn2.microsoft.com/en-us/library/aa984342(VS.71).aspx)

    参考

    创建一个有用的Windows服务来演示如何安装,如何测试和如何调试服务,访问以下MSDN站点:Windows服务应用程序介绍:

    http://msdn2.microsoft.com/en-us/library/Aa983650(VS.71).aspx

    更多信息,查看MSDN杂志中的200112月问题中的文章:Windows Services: New Base Classes in .NET Make Writing a Windows Service Easy
    http://msdn.microsoft.com/msdnmag/issues/01/12/NetServ/default.aspx
    (http://msdn.microsoft.com/msdnmag/issues/01/12/NetServ/default.aspx)

    其它参考链接:

    Windows 服务应用程序介绍

    如何:调试 Windows 服务应用程序

    疑难解答:调试 Windows 服务

    如何:记录关于服务的信息

  • 相关阅读:
    Topshelf的使用
    ref和out的区别
    .NET编码解码(HtmlEncode与HtmlDecode)
    查询表中某字段有重复记录个数的方法
    ActiveReports 报表应用教程 (8)---交互式报表之动态过滤
    ActiveReports 报表应用教程 (7)---交叉报表及数据透视图实现方案
    ActiveReports 报表应用教程 (6)---分组报表
    ActiveReports 报表应用教程 (5)---解密电子商务领域首张电子发票的诞生(套打报表)
    ActiveReports 报表应用教程 (4)---分栏报表
    ActiveReports 9 新功能:借助目录(TOC)控件为报表添加目录功能
  • 原文地址:https://www.cnblogs.com/qishichang/p/2062304.html
Copyright © 2011-2022 走看看