1、一、 window 服务是什么当你单击“开始”,执行“services.msc”命令。就会看见如下窗口。它显示的是当前操作系统中系统自带的服务或者第三方软件安装的服务。服务的状态有名称、描述、启动状态、启动类型等等。你也可以在此窗体中管理相关服务,注意谨慎操作,防止系统错误或软件故障。在此,为了让大家对后面使用的代码项目有个整体了解。整个专案有如下项目:1、ServerForm: 一个 WinForm程序,为 window服务 MyService测试而调用(永远只弹出一个,除非之前弹出的 ServerForm的关闭)。2、CreateWSSetup:一个 Console程序,为 window服
2、务 MyService生成安装和卸载脚本而使用。并且在服务安装包 MyServiceSetup中调用。传入参数 install标识安装和启动服务,unstall 表示停止和卸载服务。3、MyService: 我们今天的重点,一个 Window服务程序。4、MyServiceSetup:一个 Window服务的安装包程序。支持 Window服务MyService的安装和启动、停止和卸载。二、 Window 服务如何开发在这里只从 C#.NET开发的角度,来简单介绍 Window服务的开发。1、 新建一个 Window服务项目。2、 编写 MyService主要代码MyService类继承微软封装
3、的服务基类 ServiceBasepublic partial class MyService : ServiceBase服务启动 OnStart(string args),你可以选择是否带传入参数来执行服务。/ 启动服务protected override void OnStart(string args)/ 在此处添加代码以启动服务timer.Enabled = true;服务停止 OnStopt()/ 停止服务protected override void OnStop()/ 在此处添加代码以执行停止服务所需的关闭操作。timer.Enabled = false;System.Diagn
4、ostics.Process myproc = System.Diagnostics.Process.GetProcessesByName(“ServerForm“);if (myproc != null for (int i = 0; i 0)int n = myproc.Length;for (int i = 0; i n; i+)myproci.Kill();/ 定时执行private void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)System.Diagnostics.Process myproc =
5、 System.Diagnostics.Process.GetProcessesByName(“ServerForm“);if (myproc = null | myproc.Length = 0)/ 控制程序, 单例执行System.Diagnostics.Process.Start(AppDomain.CurrentDomain.BaseDirectory + “ServerForm.exe“);配置服务的 Install组件。当我们写好一个 MyService.cs服务后,它还不能直接安装和注册。我们还需要为它配置 Install安装组件,具体操作步骤如下:步骤 1:选中服务 MySer
6、vice.cs,双击鼠标。在 VS2008左边区域弹出MyService.cs设计*选项卡。步骤 2:在“MyService.cs设计*选项卡”中,右键鼠标单击选项“添加安装程序”。在执行“添加安装程序”之后,可以看见项目中多了如下文件和组件。步骤 3:设置安装服务的相关属性1、设置组件 serviceInstaller1的主要属性StartType: AutoMatic自动、Manual 手动,Disabled 禁止。ServiceName: 服务系统标识,在 cmd命令中执行 sr start/stop/query等等命令时候使用,用来唯一标识一个 Window服务。2、设置组件 serv
7、iceProcessInstaller1的主要属性Accout:账户类型。LocalService 基于本机运行服务、NetworkService 基于网络运行服务、LocalSystem 本地系统服务、User 基于用户认证的服务。3、 设置服务安装后“允许和桌面进行交互”,需要在 ProjectInstaller.cs中添加如下代码。namespace MyServiceRunInstaller(true)public partial class ProjectInstaller : Installerpublic ProjectInstaller()InitializeComponent
8、();protected override void OnAfterInstall(IDictionary savedState)trybase.OnAfterInstall(savedState);/ 允许服务桌面交互System.Management.ManagementObject myService = new System.Management.ManagementObject(string.Format(“Win32_Service.Name=0“, this.serviceInstaller1.ServiceName);System.Management.ManagementBa
9、seObject changeMethod = myService.GetMethodParameters(“Change“);changeMethod“DesktopInteract“ = true;System.Management.ManagementBaseObject OutParam = myService.InvokeMethod(“Change“, changeMethod, null);catch (Exception ex)三、 Windows 服务的安装和卸载注意:在执行安装或卸载服务前,我有把服务需要的相关文件,复制到C:MyService下面或其他路径。一旦安装完成后,此目录不能变更,否则不能卸载该服务和服务运行会报错。方法一:cmd 命令方式单击开始,执行 cmd命令。在弹出 cmd窗口中安装或卸载服务。1、 安装服务: sr start 为启动服务基本命令,如下: