windows服务程序编写流程
1、在Visual Studio 中建立一个新的windows服务项目RemoteServer1
2、打开Service1代码视图,里面已经有OnStart和OnStop两个方法了,OnStart就是启动服务时要做的事,OnStop是关闭服务时要做的事。
(我做的服务大的框架是监视一个文件夹,只要里面有新的.txt文件就读出它的内容,然后将其删掉。这就要用到文件监视FileSystemWatcher了,顺便又学习了一下文件监视的知识。)
3、切换到设计视图,右键-添加安装程序
4、切换到新生成的ProjectInstaller.cs设计视图,找到serviceProcessInstaller1对Account属性设置为LocalSystem,对serviceInstaller1的ServiceName属性设置为RemoteServer1(服务的名字),StartType属性设置为Automatic(系统启动的时候自动启动服务)
【6、建立一个新的安装项目RemoteServerSetup(我们为刚才那个服务建立一个安装项目)
7、右键-添加-项目输出-主输出-选择RemoteService1-确定
8、右键-视图-自定义操作-自定义操作上右键-添加自定义操作-打开应用程序文件夹-选择刚才那个主输出-确定
9、重新生成这个安装项目-右键-安装】
6到9步为上网查的资料,我的做法是点项目右键的编译生成,如果没有错误就会生成一个和项目同名的.exe文件,用Visual Studio Tools里的命令编译器运行如下命令:
installutil 上面.exe文件完整的路径
(卸载服务是installutil /u 上面.exe文件完整的路径)
10、在服务管理器中(我的电脑-右键-管理-服务和应用程序-服务)找到RemoteServer1服务,启动服务
注意:
1. 如果要一次生成多个服务,要将RemoteService.Designer.cs文件中的
this.ServiceName = "RemoteService1"; 删掉。
2. 需要一次生成多个服务时,不能调用静态方法,否则多个服务共用一个存储区。(比如生成日志文件的方法,如果将其设置成静态的,日志将生成到最后启动的服务的日志文件里)
3. 在OnStop()方法里也要有关闭每个服务的代码。
4. 最好在OnStart()和OnStop()中都写上try..catch,在catch中用System.Environment.Exit(0)结束。否则这两部分出错了服务就有可能死在那里,删也删不掉。
5. 服务程序有改动后,要重新编译,在重新编译之前把服务要关掉。
6. 在OnStart()中如果程序出错或捕捉到异常要用System.Environment.Exit(0);停止服务,在程序别的地方出现问题用Return;就行了。
文件监视:
FileSystemWatcher m_FileWatcher = new FileSystemWatcher();
//文件监视事件,括号里为方法名(触发的事件),在这个方法中写具体的操作
FileSystemEventHandler m_fileSystemEvent = newFileSystemEventHandle(fileSystemWatcher1_Created);
string m_path =“”; //监视的文件夹的路径
m_FileWatcher.BeginInit();
m_FileWatcher.Path = m_path;
m_FileWatcher.Created += m_fileSystemEvent; // .Changed/.Deleted/.Disposed/.Renamed
m_FileWatcher.EnableRaisingEvents = true; //文件监视事件可以运行
m_FileWatcher.EndInit();
private void fileSystemWatcher1_Created(object sender, FileSystemEventArgs e)
{
m_FileWatcher.WaitForChanged(System.IO.WatcherChangeTypes.Changed, 500);
}
本文作者:网友 来源:CIOZJ
CIO之家 www.ciozj.com 微信公众号:imciow