ms-help://MS.MSDNQTR.2003FEB.2052/vbcon/html/vbwlkwalkthroughcreatingwindowsserviceapplication.htmmsdn2003

解决方案 »

  1.   

    演练:在组件设计器中创建 Windows 服务应用程序请参见创建并配置服务 在“文件”菜单上指向“新建”,然后单击“项目”。 
    “新建项目”对话框打开。 在 Visual Basic 或 Visual C# 项目模板的列表中选择“Windows 服务”项目,并将其命名为 MyNewService。 
    注意   项目模板自动添加一个继承自 System.ServiceProcess.ServiceBase 的名为 Service1 的组件类。
    单击设计器以选择 Service1。然后,在“属性”窗口中,将 Service1 的 ServiceName 属性设置为 MyNewService。 
    将 AutoLog 属性设置为 true。 
    在“视图”菜单中,选择“代码”以打开代码编辑器。编辑 Main 方法以创建 MyNewService 的实例。当在步骤 3 中重命名服务时,未在 Main 方法中修改类名。若要访问 Visual Basic 中的 Main 方法,请展开“组件设计器生成的代码”区域。 // C#
    static void Main()
    {
       System.ServiceProcess.ServiceBase[] ServicesToRun;
       // Change the following line to match.
       ServicesToRun = new System.ServiceProcess.ServiceBase[] 
          { new MyNewService() };
       System.ServiceProcess.ServiceBase.Run(ServicesToRun);
    }
    在下一节中,您将把自定义事件日志添加到 Windows 服务中。事件日志与 Windows 服务没有任何形式的关联。此处,EventLog 组件用作可以添加到 Windows 服务的组件类型的示例。有关自定义事件日志的更多信息,请参见创建和移除自定义事件日志。将自定义事件日志功能添加到服务中 在解决方案资源管理器中,右击 Service1.vb 或 Service1.cs,并选择“视图设计器”。 
    在工具箱的“组件”选项卡中,将 EventLog 组件拖到设计器。 
    在解决方案资源管理器中,右击 Service1.vb 或 Service1.cs,并选择“查看代码”。 
    编辑构造函数以定义一个用户事件日志。若要访问 Visual Basic 中的构造函数,请展开“组件设计器生成的代码”区域。 // C#
    public MyNewService()
    {
       InitializeComponent();
       if (!System.Diagnostics.EventLog.SourceExists("MySource")) 
       {         
          System.Diagnostics.EventLog.CreateEventSource(
             "MySource","MyNewLog");
       }
       eventLog1.Source = "MySource";
       eventLog1.Log = "MyNewLog";
    }
    定义当服务启动时发生的情况 在代码编辑器中,找到创建项目时被自动重写的 OnStart 方法,并编写代码来确定当服务开始运行时发生的情况: // C#
    protected override void OnStart(string[] args)
    {
       eventLog1.WriteEntry("In OnStart");
    }
    注意   服务应用程序设计为长时间运行。因此,它通常轮询或监视系统中的情况。监视是在 OnStart 方法中设置的。但是,OnStart 实际上不进行监视。一旦服务的操作开始,OnStart 方法必须返回到操作系统。它不能始终循环或阻塞。若要设置简单的轮询机制,可以使用 System.Timers.Timer 组件。在 OnStart 方法中,设置组件上的参数,然后将 Timer.Enabled 属性设置为 true。然后,计时器将在代码中周期性地引发事件,此时,服务可以进行其监视工作。
    定义当服务停止时发生的情况 在代码编辑器中,找到创建项目时被自动重写的 OnStop 过程,并编写代码来确定当服务停止时发生的情况: // C#
    protected override void OnStop()
    {
       eventLog1.WriteEntry("In onStop."); 
    }
    还可以重写 OnPause、OnContinue 和 OnShutdown 方法来定义对组件的进一步处理。定义服务的其他操作 对于要处理的方法,重写适当的方法并定义要发生的操作。 
    下面的代码显示重写 OnContinue 方法时代码的情况: 
    // C#
    protected override void OnContinue()
    {
       eventLog1.WriteEntry("In OnContinue.");
    }  
    某些自定义操作需要在安装 Windows 服务时发生,这可以由 Installer 类来完成。Visual Studio 可以专门为 Windows 服务创建这些安装程序并将它们添加到项目中。
      

  2.   

    为服务创建安装程序 返回到 Service1 的“设计”视图。 
    单击设计器的背景以选择服务本身,而不是它的任何内容。 
    在“属性”窗口中,单击属性列表下面灰色区域中的“添加安装程序”链接。 
    默认情况下,向您的项目添加包含两个安装程序的组件类。将该组件命名为 ProjectInstaller,它包含的安装程序分别是服务的安装程序和服务关联进程的安装程序。 访问 ProjectInstaller 的“设计”视图,然后单击“ServiceInstaller1”。 
    在“属性”窗口中,将 ServiceName 属性设置为 MyNewService。 
    将 StartType 属性设置为 Automatic。 
    在设计器中,选择 ServiceProcessInstaller1(针对 Visual Basic 项目),或 serviceProcessInstaller1(针对 Visual C# 项目)。将 Account 属性设置为 LocalService。这将使得在本地服务帐户上安装和运行该服务。有关更多信息,请参见 ServiceProcessInstaller.Account 属性。 
    安全说明   LocalService 帐户用作本地计算机上的非特权用户,向任何远程服务器显示匿名凭据。使用其他帐户时需要特别小心,因此它们具有较高的特权,会增加您受到恶意代码攻击的风险。
    生成服务项目 在解决方案资源管理器中,右击您的项目并从快捷菜单中选择“属性”。出现项目的“属性页”对话框。 
    在左边的窗格中,选择“通用属性”文件夹中的“常规”选项卡。 
    从“启动对象”列表中,选择 MyNewService(针对 Visual Basic 项目),或 MyNewService.MyNewService(针对 Visual C# 项目)。单击“确定”。 
    按 CTRL+SHIFT+B 生成项目。 
    生成项目后,便可以对其进行部署了。安装项目将安装已编译的项目文件并运行要运行 Windows 服务所需的安装程序。若要创建完整的安装项目,您需要将项目输出 MyNewService.exe 添加到安装项目,然后添加自定义操作来安装 MyNewService.exe。有关安装项目的更多信息,请参见安装项目。有关自定义操作的更多信息,请参见演练:创建自定义操作。为服务创建安装项目 在“文件”菜单上指向“添加项目”,然后选择“新建项目”。 
    在“项目类型”窗格中选择“安装和部署项目”文件夹。 
    在“模板”窗格中选择“安装项目”。将项目命名为 MyServiceSetup。 
    安装项目随即添加到解决方案。 然后,将 Windows 服务项目的输出 MyNewService.exe 添加到安装项目中。向安装项目添加 MyNewService.exe 在解决方案资源管理器中,右击“MyServiceSetup”,指向“添加”,然后选择“项目输出”。 
    出现“添加项目输出组”对话框。 在“项目”框中选择“MyNewService”。 
    在列表框中,选择“主输出”,然后单击“确定”。 
    MyNewService 的主输出的项目项被添加到安装项目中。现在添加自定义操作以安装 MyNewService.exe 文件。 向安装项目添加自定义操作 在解决方案资源管理器中右击安装项目,指向“视图”,然后选择“自定义操作”。 
    出现自定义操作编辑器。 在“自定义操作”编辑器中右击“自定义操作”节点,然后选择“添加自定义操作”。 
    出现“选择项目中的项”对话框。 在列表框中双击“应用程序文件夹”将其打开,选择“主输出来自 MyNewService(活动)”,然后单击“确定”。 
    主输出被添加到自定义操作的所有四个节点,即“安装”、“提交”、“回滚”和“卸载”。 在解决方案资源管理器中,右击 MyServiceSetup 项目并选择“生成”。 
    安装 Windows 服务 若要安装 MyEventLog.exe,请右击解决方案资源管理器中的安装项目,并选择“安装”。 
    启动和停止服务 通过执行下列操作之一打开服务控制管理器: 
    在 Windows 2000 Professional 中,在桌面上右击“我的电脑”,然后单击“管理”。在“计算机管理”控制台中,展开“服务和应用程序”节点。 
    - 或 - 在 Windows 2000 Server 中,单击“开始”,指向“程序”,单击“管理工具”,然后单击“服务”。 
    注意   在 Windows NT 4.0 版中,可以从控制面板中打开该对话框。
    现在应该看到 MyNewService 列在窗口的“服务”区域中。 从列表中选择您的服务,右击该服务,然后单击“启动”。 
    右击该服务,然后单击“停止”。 
    验证服务的事件日志输出 打开服务器资源管理器并访问“事件日志”节点。有关更多信息,请参见在服务器资源管理器中处理事件日志。 
    注意   服务器资源管理器的“服务器”节点在 Visual Basic 和 Visual C# .NET 的标准版中不可用。有关更多信息,请参见 Visual Basic 标准版功能或 Visual C# 标准版的功能。
    找到 MyNewLog 的列表并展开它。您应该看到服务所执行操作的项。 
    卸载服务 在“开始”菜单上,打开“控制面板”并单击“添加或删除程序”,然后找到您的服务并单击“删除”。 
    还可以通过右击 .msi 文件的程序图标并选择“卸载”来卸载该程序。 
    注意   如果是在 Windows 2000 上安装了服务,则必须重新启动系统后才能重新安装服务。在 Windows 2000 中,服务在系统重新启动之前不会完全删除。
    下一步
    也可以利用 ServiceController 组件将命令发送到已安装的服务。有关使用 ServiceController 组件的更多信息,请参见监视 Windows 服务。可以在安装应用程序时使用安装程序创建事件日志,而不是在运行应用程序时创建事件日志。此外,在卸载应用程序时,事件日志将被安装程序删除。有关更多信息,请参见演练:安装事件日志组件。请参见
    Windows 服务应用程序 | Windows 服务应用程序介绍 | 将安装程序添加到服务应用程序 | 安装和卸载服务 | 调试 Windows 服务应用程序 | 启动事件查看器 | 访问和初始化服务器资源管理器 --------------------------------------------------------------------------------向 Microsoft 发送有关此主题的反馈© Microsoft Corporation。保留所有权利。