C#开发一个Windows服务.docx
- 文档编号:4634849
- 上传时间:2023-05-07
- 格式:DOCX
- 页数:10
- 大小:303.96KB
C#开发一个Windows服务.docx
《C#开发一个Windows服务.docx》由会员分享,可在线阅读,更多相关《C#开发一个Windows服务.docx(10页珍藏版)》请在冰点文库上搜索。
C#开发一个Windows服务
本文将向你展示如何用C#开发一个Windows服务来记录系统使用情况。
每一个人都想知道他们每天在什么时间启动和关闭自己的系统,以及系统每天运行了多少时间。
如果用一个DataGrid控件来显示系统启动、关闭及所消耗的时间将是一个不错的主意。
在本文中,我提供了一种方法来实现这一目标-使用C#开发一个Windows服务。
其实,每个人都了解一点Windows服务。
但是,为了介绍之目的,我仅尽可能少得解释一下Windows服务。
然后,我们来讨论如何设计一个这样的应用程序。
一、什么是Windows服务?
其实,Windows服务只是运行于后台的并不要求我们了解的一种进程而已。
而且,它们的绝大部分并不要求用户交互。
如果我们在"开始"菜单的"运行"命令行下输入"services.msc"并回车,那么我们就可以看到在我们当前的系统中运行的服务情况。
其中,有一些服务是当系统启动时自动启动的。
但是,也有一些服务必须在我们的手工启动下才能运行。
二、Windows服务的优点
1.能够自动运行。
2.不要求用户交互。
3.在后台运行。
一般情况下,Windows服务被用于耗费时间很多的进程中,例如备份数据库,等等。
现在,我们要设计一个Windows服务来实现记录你的系统启动和关闭需要的时间。
我使用VisualStudio2003设计了这个应用程序。
三、设计Windows服务
第一步:
首先打开VisualStudio并且选择VisualC#工程。
选择模板类型为Windows服务,并命名为Monitoring,如下图所示:
然后,加入对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控件中分中,我们用C#创建一个web应用程序,并命名为SystemMonitor。
加入下面命名空间:
usingSystem.IO;
usingSystem.Xml;
usingSystem.Text;
之后,把DataGrid和Label控件拖动到页面上,如下图所示:
把下列代码复制到Page_Load事件中:
File.Copy("c:
\\file1.xml","c:
\\temp1.xml",true);
StreamWriterwriter1=File.AppendText("c:
\\temp1.xml");
writer1.Write("<shutdown>undefined</shutdown>");
writer1.Write("<timespent>undefined</timespent>");
writer1.Write("</time>");
writer1.WriteLine("</times>");
writer1.Close();
DataSetds=newDataSet();
ds.ReadXml("c:
\\temp1.xml");
TimeSpant=newTimeSpan();
DataGrid1.DataSource=ds;
DataGrid1.DataBind();
XmlTextReaderreader=newXmlTextReader("c:
\\temp1.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:
\\temp1.xml");
最后把下面的声明粘贴到Page_Load事件上部:
privatedoubleduration;
我解释一下程序在Page_Load事件中做了什么。
首先,我把文件file1.xml(它包含系统定时信息)的内容复制到临时文件中。
然后,我把一些标记添加到该临时文件中。
之后,我把temp的内容读取到一个dataset中,最后把它绑定到一个DataGrid中。
以后,我创建逻辑来查找所有花费的时间。
我非常希望每个人都能理解上面的代码。
上面页面的输出结果大致如下图所示:
显示xml数据。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C# 开发 一个 Windows 服务