对C#一窍不通的我,居然被Manager分配了一个写Windows Service 的活,说是让我多学点东西。。。
可苦逼实习生只有这个命,实力有限,暂时又找不到新的实习。只能硬着头皮干下去了。
下午搜了一下午,总算勉强写了个能写文件的service,mark一下,也许以后还能用的上。
1.创建一个window service 程序
此时程序将会自动为你生成一个叫Program.cs和Service1.cs文件
Program.cs是该程序的入口,包含Main函数
Service1.cs就是我们启动服务时要运行的代码
2.首先实现Service1.cs 的onStart 和onStop方法,即为我们启动服务和停止服务时将会进行的操作
protected override void OnStart(string[] args)
{
FileStream fs = new FileStream(@"C:\service1.txt",FileMode.OpenOrCreate,FileAccess.Write);
StreamWriter sw = new StreamWriter(fs);
sw.WriteLine("service start:" + DateTime.Now.ToString());
sw.Flush();
sw.Close();
fs.Close();
}
protected override void OnStop()
{
FileStream fs = new FileStream(@"C:\service1.txt", FileMode.OpenOrCreate, FileAccess.Write);
StreamWriter sw = new StreamWriter(fs);
sw.WriteLine("service stop:" + DateTime.Now.ToString());
sw.Flush();
sw.Close();
fs.Close();
}
这段代码是在网上抄的,然后我就很困惑为什么要在字符串前加@。搜了一下发现是强制不转义的意思,果然是弱爆了...
然后点击Service1.cs,会出现如下界面:
3. 点击Add Installer,将会为我们的程序自动添加一个ProjectInstaller.CS,用来在安装到的系统上注册一项服务。
如图:
4. 选中serviceInstaller1,在Properties中修改ServiceName为Service1(默认不需修改),修改StartType为Automatic,自启动
也可以修改Description 和DisplayName 是你在Services中显示名和描述(可选)
选中serviceProcessInstaller1,修改Account 为LocalSystem
5. 点击Run 按钮,一般会出现如下对话框:
这是说我们不能通过run来运行该服务,必须用installutil.exe(.NET提供的组件)来run这个程序。
但是我们可以在该项目的bin\Debug\ 目录下发现多了一个 WindowsService1.exe的可执行文件。
6.现在我们以管理员身份启动命令行,首先cd 到该debug目录下,然后执行如下命令:
%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe WindowsService1.exe
如果要卸载该服务则执行
%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe /u WindowsService1.exe
SystemRoot通常指的是C:\Windows,WindowsService1.exe 是你在debug目录下生成的可执行文件。
执行完毕后,启动services.msc即可查看到有一个叫做Service1的服务,或者是你自定义的DisplayName.
Start it!
你就可以看到在C盘下生成的service1.txt 文件了。
终于码完了....累死,歇会,下班!