第二步:
按F7键打开代码窗口。然后,加入对System.IO命名空间的引用,以便把系统定时功能编写到一个文件中。下一步,用Monitoring一词替换所有出现的Service1一词。之后,转入设计模式(按键shift+F7)。选择Solution Explorer(按键Ctrl+Alt+L)。点击Service1.cs并且命名它为Monitoring.cs。
之后,转入代码窗口。在OnStart事件中加入下列代码,如下图所示:
在OnStart事件中实现的功能
首先,在c盘上创建一个xml文件,并命名为file1。然后,在这个文件中建立如下代码:
<?xml version="1.0" encoding="utf-8" standalone="no"?><times>
然后,关闭它。
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)我创建了一个服务,它能够在系统启动时自动启动并且记录下启动时间。当系统关闭时,它也关闭。而且,它会记录下关闭时间和系统中所花费的时间。
首先,我要创建一个StreamWriter来把系统启动时间写入file1.xml文件中。
在把代码复制到你的OnStart事件后,正好在Monitoring构造器的上面创建一个公共变量temp,如下图所示:
此后,把这部分代码复制到你的代码窗口:
再把下面代码复制到OnStart事件中,如下图所示:
StreamWriter writer=File.AppendText("d:\file1.xml");writer.Write("<time>");writer.WriteLine("<Date> "+ (DateTime.Now.ToString("dd-MM-yy"))+"</Date>");writer.WriteLine("<started> "+ (DateTime.Now.ToString("t"))+"</started>");temp=DateTime.Now;writer.Close();
在OnShutdown事件中实现的功能
当系统要关闭时,我使用一个StreamWriter再次打开file1.xml-它将记下系统关闭时间,还将记下在系统启动和关闭之间所花费的时间跨度。我在OnStart和OnShutdown事件中使用了一个temp变量。在OnStart中,它用于存储启动时间。然后,它被再次用于OnShutdown事件中来记下系统启动和关闭之间所花费的时间间隔。
然后,我们必须配置我们的Windows服务以便安装和运行。
因此,首先转到设计视图中,并选择属性窗口(可以按下F4)。
把CanStop和CanShutdown设置为true。在安装之前,我们必须要安装一个安装程序。
右击设计视图窗口,然后选择"Add Installer"。然后,它将显示ProjectInstaller.cs。在这个文件中,serviceInstaller1和serviceProcessInstaller1都存在。转到serviceProcessInstaller1属性处:
把Account设置为LocalSystem。
然后,转到serviceInstaller1属性处。
把DisplayName和ServiceName设置为Monitoring。
设置启动类型(StartType)为automatic。
请参考下图:
然后,转到VS.NET的命令提示符下。
在控制台下,转到服务的Debug文件夹下:
输入"InstallUtil Monitoring.exe"
如果它显示"Commit Phase Completed Successfully",则说明服务被成功安装。
然后,重启系统以启动服务。在重启之后,打开file1.xml文件,它记录了系统的开始时间。如果关闭系统,它将记录下系统的关闭时间和使用系统的时间长度。通过这一部分,我们已经完成了记录下系统所消耗的时间。接下来,我们将创建一个web应用程序以便在一个Grid控件中显示xml数据。
在下一部分中,我将解释如何抽取这个xml文件数据并且在一个DataGrid控件中显示它。
四、 用C#创建一个Web应用程序
在这一部分中,我们用C#创建一个web应用程序,并命名为SystemMonitor。
加入下面命名空间:
using System.IO;using System.Xml;using System.Text;
之后,把DataGrid和Label控件拖动到页面上,如下图所示:
把下列代码复制到Page_Load事件中:
File.Copy("c:\file1.xml","c:\temp1.xml",true);StreamWriter writer1=File.AppendText("c:\temp1.xml");writer1.Write("<shutdown>undefined</shutdown>");writer1.Write("<timespent>undefined</timespent>");writer1.Write("</time>");writer1.WriteLine("</times>");writer1.Close();DataSet ds=new DataSet();ds.ReadXml("c:\temp1.xml");TimeSpan t=new TimeSpan();DataGrid1.DataSource=ds;DataGrid1.DataBind();XmlTextReader reader=new XmlTextReader("c:\temp1.xml");while(reader.Read()){ if(reader.NodeType==XmlNodeType.Element) { if(reader.Name=="timespent") { string temp11=reader.ReadInnerXml().ToString(); if(temp11!="undefined") { temp11=temp11.Replace(":","."); temp11=temp11.Replace(" ",""); duration +=Convert.ToDouble(temp11); } } }}Response.Write("Total Duration is : ");double temp122=Convert.ToDouble(duration);string hr=temp122.ToString();string hrstr=hr.Substring(0,hr.IndexOf("."));Response.Write(hrstr.ToString()+" Hours");string mins=hr.Substring(hr.IndexOf(".")+1,(hr.Length -hr.IndexOf(".")-1));Response.Write(" "+mins.ToString()+" Minutes");reader.Close();File.Delete("c:\temp1.xml");
最后把下面的声明粘贴到Page_Load事件上部:
private double duration;
我解释一下程序在Page_Load事件中做了什么。
首先,我把文件file1.xml(它包含系统定时信息)的内容复制到临时文件中。然后,我把一些标记添加到该临时文件中。之后,我把temp的内容读取到一个dataset中,最后把它绑定到一个DataGrid中。以后,我创建逻辑来查找所有花费的时间。
我非常希望每个人都能理解上面的代码。
上面页面的输出结果大致如下图所示:
猜你喜欢