创建并配 置服务
-
在“文件” 菜 单上单击“新建项目” 。
打开“新建项目” 对 话框。
-
在 Visual C#项目模板的列表中选择“Windows 服务” 项目,并将其命名为 MyNewService 。单击“确定” 。
说 明: 项目模板自动添加从 System.ServiceProcess. . :: . ServiceBase 继承的名为 Service1 的组件类。
-
单击设计器选择 Service1 。然后,在“属性” 窗口中,将 Service1 的 ServiceName 和“(名称)” 属性设置为“MyNewService” 。
-
将 AutoLog 属性设置为 true 。
-
在“视图” 菜单中单击“代码” 以打开代码编辑器。编辑 Main 方法以创建“MyNewService” 的实 例。当在步骤 3 中重命名服务时,未在 Main 方法中修改类名。在 Visual C# 应用程序中,Main 方法分别位于 Program.cs 和 Program.js 文件中。
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.cs” ,并选择“视图设计器” 。
-
从“工具箱” 的“组件” 选项卡,将 EventLog 组件拖到设计器中。
-
在“解决方案资源管理器” 中,右击“Service1.cs” ,并选择“查看代码” 。
-
编 辑构造函数以定义一个用户事件日志。
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 方法中,可以设置组件上的参数,然后将 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 服务创建这些安装程序并将它们添加到项目中。
为服务创建安装程序
-
在“解决方案资源管理器” 中,右击“Service1.cs” , 并选择“视图设计器” 。
-
单击设计器的背景以选择服务本身,而不是它的 任何内容。
-
设计器具有焦点时,右击然后单击“添加安装程序” 。
默 认情况下,向您的项目添加一个包含两个安装程序的组件类。将该组件命名为 ProjectInstaller , 它包含的安装程序分别是服务的安装程序和服务关联进程的安装程序。
-
在“ProjectInstaller” 的“设计” 视图中,单击“ServiceInstaller1” 或“serviceInstaller1” 。
-
在“属 性” 窗口中,将 ServiceName 属性设置为“MyNewService” 。
-
将 StartType 属性设置为 Automatic 。
-
在 设计器中单击“ServiceProcessInstaller1” 。将 Account 属性设置为 LocalService 。 这将使得在本地服务帐户上安装和运行该服务。
安全说明: LocalService 帐户用作本地计算机上的非特权用户,向任何远程服务器显示匿名凭据。使用其他帐户时需要特别小心,因此它们具有较高的特权,会增加您受到恶意代码攻击的风 险。
生成服务项目
-
在“解决方案资源管理器” 中,右击您的项目,然后单击“属性” 。 出现项目的“属性设计器” 。
-
从“应用程序”页的“启动对象” 列表中单击“MyNewService” 。
-
按 Ctrl+Shift+B 生成项目。
生成项目后,便可以对其进行部署了。安装项目将安装已编译的项目 文件并运行要运行 Windows 服务所需的安装程序。若要创建完整的安装项目,您必须将项目输出“MyNewService.exe” 添 加到安装项目,然后添加自定义操作来安装“MyNewService.exe” 。
为服务创建安装项目
-
在“解决方案资源管理器” 中,右击选择解决方案,指向“添加” , 然后单击“新建项目” 。
-
在“项目 类型” 窗格中选择“安装和部署项目” 文件夹。
-
在“模板” 窗格中选择“安装项目” 。将项目命名为 MyServiceSetup 。单击“确定” 。
安 装项目随即添加到解决方案。
然后,将 Windows 服务项目的输出 MyNewService.exe 添加到安装项目中。
向安装项目添加 MyNewService.exe
-
在“解决方案资源管理器” 中,右击“MyServiceSetup” ,指向“添加” ,然后单击“项目输出” 。
出现“添加项目输出组” 对话 框。
-
并且在“项目” 框中选择了“MyNewService” 。
-
在 列表中,选择“主输出” ,再单击“确定” 。
MyNewService 的主输出的项目项被添加到安装项目中。
现 在添加自定义操作以安装 MyNewService.exe 文件。
向安装项 目添加自定义操作
-
在“解决方案资 源管理器” 中右击安装项目,指向“视图” ,再选择“自 定义操作” 。
出现“自定义操作” 编辑器。
-
在“自定义操作” 编辑器中右击“自定义操作” 节点,再单击“添加自定义操作” 。
出现“选择项目中的项” 对 话框。
-
在列表中双击“应用程序文件夹” 以将其打开,选择“MyNewService 的主输出(活动)” ,再单击“确定” 。
主 输出被添加到自定义操作的所有四个节点:“安装” 、“提交” 、“回滚” 和“卸载” 。
-
在“解决方案资源管理器” 中,右击“MyServiceSetup” 项 目并选择“生成” 。
安装 Windows 服务
-
若 要安装“MyNewService.exe” ,请右击“解决方案资 源管理器” 中的安装项目,再选择“安装” 。
-
完成“安装向导” 中的步骤。生成并保存您的解决方案。
启动和停止服务
-
通 过执行下列操作之一打开“服务控制管理器”:
-
在 Windows XP 和 2000 专业版中,在桌面上右击“我的电脑” ,然后单击“管理” 。在“计算机管理” 控制台中,展开“服务和应用程序” 节点。
- 或 -
-
在 Windows Server 2003 和 Windows 2000 Server 中,单击“开始” ,指向“程序” ,单击“管理工具” ,然后单击“服务” 。
说 明: 在 Windows NT 4.0 版中,可以从“控制面板”中打开此对话框。
现 在应该看到“MyNewService” 列在窗口的“服务” 区 域中。
-
-
从列表中选择您的服务,右击该服务,然后单击“启动” 。
-
右 击该服务,再单击“停止” 。
验证服务的事件日志输出
-
打 开“服务器资源管理器” 并访问“事件日志” 节点。
说 明: Visual Studio 标准版中不提供“Windows 服务” 模板及相关功能。
-
找到 MyNewLog 的列表并展开它。您应该看到服务所执行操作的项。
卸载服务
-
在“开始” 菜单上打开“控制面板” 并单击“添加或删除程序” ,然后找到您的服务并单击“卸载” 。
-
还 可以通过右击 .msi 文件的程序图标并选择“卸载” 来卸载该程序。
说 明: 如果服务是安装在 Windows 2000 上的,则必须重新启动系统才能重新安装服务。在 Windows 2000 中,服务在系统重新启动之前不会完全删除。