|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
觉得J2EE好像有很多工具,比如servlet,jboss,tomcat,ejb什么的,可是微软的.NET怎么什么也没有啊?window|监控<P> 择要本文将向你展现怎样用C#开辟一个Windows服务来纪录体系利用情形。
每个人都想晓得他们天天在甚么工夫启动和封闭本人的体系,和体系天天运转了几工夫。假如用一个DataGrid控件来显现体系启动、封闭及所损耗的工夫将是一个不错的主张。
在本文中,我供应了一种办法来完成这一方针-利用C#开辟一个Windows服务。实在,每一个人都懂得一点Windows服务。可是,为了先容之目标,我仅尽量少得注释一下Windows服务。然后,我们来会商怎样计划一个如许的使用程序。
1、甚么是Windows服务?
实在,Windows服务只是运转于背景的其实不请求我们懂得的一种历程罢了。并且,它们的尽年夜部分其实不请求用户交互。假如我们在"入手下手"菜单的"运转"命令行下输出"services.msc"并回车,那末我们就能够看到在我们以后的体系中运转的服务情形。个中,有一些服务是当体系启动时主动启动的。可是,也有一些服务必需在我们的手工启动下才干运转。
2、Windows服务的长处
1.可以主动运转。
2.不请求用户交互。
3.在背景运转。
一样平常情形下,Windows服务被用于泯灭工夫良多的历程中,比方备份数据库,等等。
如今,我们要计划一个Windows服务来完成纪录你的体系启动和封闭必要的工夫。我利用VisualStudio2003计划了这个使用程序。
3、计划Windows服务
第一步:
起首翻开VisualStudio而且选择VisualC#工程。选择模板范例为Windows服务,并定名为Monitoring,以下图所示:
<P> 第二步:
按F7键翻开代码窗口。然后,到场对System.IO定名空间的援用,以便把体系准时功效编写到一个文件中。下一步,用Monitoring一词交换一切呈现的Service1一词。以后,转进计划形式(按键shift+F7)。选择SolutionExplorer(按键Ctrl+Alt+L)。点击Service1.cs而且定名它为Monitoring.cs。
以后,转进代码窗口。在OnStart事务中到场以下代码,以下图所示:
在OnStart事务中完成的功效
起首,在c盘上创立一个xml文件,并定名为file1。然后,在这个文件中创建以下代码:
<?xmlversion="1.0"encoding="utf-8"standalone="no"?>
<times>
然后,封闭它。
我创立了一个服务,它可以在体系启动时主动启动而且纪录下启动工夫。当体系封闭时,它也封闭。并且,它会纪录下封闭工夫和体系中所消费的工夫。
起首,我要创立一个StreamWriter来把体系启动工夫写进file1.xml文件中。
在把代码复制到你的OnStart事务后,恰好在Monitoring机关器的下面创立一个大众变量temp,以下图所示:
今后,把这部分代码复制到你的代码窗口:
再把上面代码复制到OnStart事务中,以下图所示:
StreamWriterwriter=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。在安装之前,我们必需要安装一个安装程序。
右击计划视图窗口,然后选择"AddInstaller"。然后,它将显现ProjectInstaller.cs。在这个文件中,serviceInstaller1和serviceProcessInstaller1都存在。转到serviceProcessInstaller1属性处:
・把Account设置为LocalSystem。
・然后,转到serviceInstaller1属性处。
・把DisplayName和ServiceName设置为Monitoring。
・设置启动范例(StartType)为automatic。
请参考下图:
然后,转到VS.NET的命令提醒符下。
在把持台下,转到服务的Debug文件夹下:
输出"InstallUtilMonitoring.exe"
假如它显现"CommitPhaseCompletedSuccessfully",则申明服务被乐成安装。
然后,重启体系以启动服务。在重启以后,翻开file1.xml文件,它纪录了体系的入手下手工夫。假如封闭体系,它将纪录下体系的封闭工夫和利用体系的工夫长度。经由过程这一部分,我们已完成了纪录下体系所损耗的工夫。接上去,我们将创立一个web使用程序以便在一个Grid控件中显现xml数据。
鄙人一部分中,我将注释怎样抽取这个xml文件数据而且在一个DataGrid控件中显现它。
<P> 4、用C#创立一个Web使用程序
在这一部分中,我们用C#创立一个web使用程序,并定名为SystemMonitor。
到场上面定名空间:
usingSystem.IO;
usingSystem.Xml;
usingSystem.Text;
以后,把DataGrid和Label控件拖动到页面上,以下图所示:
把以下代码复制到Page_Load事务中:
File.Copy("c:file1.xml","c: emp1.xml",true);
StreamWriterwriter1=File.AppendText("c: emp1.xml");
writer1.Write("<shutdown>undefined</shutdown>");
writer1.Write("<timespent>undefined</timespent>");
writer1.Write("</time>");
writer1.WriteLine("</times>");
writer1.Close();
DataSetds=newDataSet();
ds.ReadXml("c: emp1.xml");
TimeSpant=newTimeSpan();
DataGrid1.DataSource=ds;
DataGrid1.DataBind();
XmlTextReaderreader=newXmlTextReader("c: emp1.xml");
while(reader.Read())
{
if(reader.NodeType==XmlNodeType.Element)
{
if(reader.Name=="timespent")
{
stringtemp11=reader.ReadInnerXml().ToString();
if(temp11!="undefined")
{
temp11=temp11.Replace(":",".");
temp11=temp11.Replace("","");
duration+=Convert.ToDouble(temp11);
}
}
}
}
Response.Write("TotalDurationis:");
doubletemp122=Convert.ToDouble(duration);
stringhr=temp122.ToString();
stringhrstr=hr.Substring(0,hr.IndexOf("."));
Response.Write(hrstr.ToString()+"Hours");
stringmins=hr.Substring(hr.IndexOf(".")+1,(hr.Length-hr.IndexOf(".")-1));
Response.Write(""+mins.ToString()+"Minutes");
reader.Close();
File.Delete("c: emp1.xml");
最初把上面的声明粘贴到Page_Load事务上部:
privatedoubleduration;
我注释一下程序在Page_Load事务中做了甚么。
起首,我把文件file1.xml(它包括体系准时信息)的内容复制光临时文件中。然后,我把一些标志增加到该一时文件中。以后,我把temp的内容读取到一个dataset中,最初把它绑定到一个DataGrid中。今后,我创立逻辑来查找一切消费的工夫。
我十分但愿每一个人都能了解下面的代码。
下面页面的输入了局大抵以下图所示:
因为各系统的API不同,代码调用API编写程序就会遇到很多不兼容的地方,比如Java改写后的Serv-U就不能在手机上执行,手机的游戏也不能直接在微机上执行。 |
|