商讯信箱
用户名: @
密  码:   注册|忘记密码
登录
个人用户经销商
信箱 E杂志
您的位置:首页 > 技术频道 > 正文

Windows服务快速更新办法

作者:IT168  2007-05-22

  【IT168技术新闻】本文介绍了一种实现更新运行中windows服务的简单方法。

   以下代码段实现了不需要手工启动/停止服务来更新Windows服务的功能。

   为了实现如此功能,我们必须首先将自己编写的新的service .exe文件放置在一个指定的目录下,之后service自己会查找文件系统。一旦它发现自身的文件更新,它便会调用serviceupdate.exe文件来停止服务,取代当前执行的文件,然后再重启服务。这样的处理方式在需要多次更新一个服务时,可以节省大量时间。

   以下代码在windows service中运行:

private void IntializeFileSystemWatcher() { System.IO.FileSystemWatcher newexe=new System.IO.FileSystemWatcher( "c:\\services\\Updates","newservice.exe"); newexe.Created += new FileSystemEventHandler(NewExecutable); newexe.EnableRaisingEvents = true; } private void NewExecutable(object source, FileSystemEventArgs e) { Process.Start("c:\\services\\ServiceUpdate.exe","newservice"); } protected override void OnStart(string[] args) { IntializeFileSystemWatcher(); }

      serviceupdate.exe文件的内容如下:

static void Main(string[] args) { if (args.Length == 0) return; string filename=args[0]; System.ServiceProcess.ServiceController target = new System.ServiceProcess.ServiceController(filename); target.Stop(); while(target.Status != System.ServiceProcess.ServiceControllerStatus.Stopped) { target.Refresh(); } Thread.Sleep(2000); File.Delete("c:\\services\\Updates\\" + filename + ".exe"); File.Move("c:\\services\\Updates\\" + filename + ".exe","c:\\services\\" + filename + ".exe"); target.Start(); }


 

1
【内容导航】
第1页: 第1页
©版权所有。未经许可,不得转载。
[责任编辑:张丽婷]