首页  ·  知识 ·  编程语言
windows服务程序的编写过程
网友  CIOZJ  .NET  编辑:dezai   图片来源:网络
在Visual Studio 中建立一个新的windows服务项目RemoteServer1

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
   
免责声明:本站转载此文章旨在分享信息,不代表对其内容的完全认同。文章来源已尽可能注明,若涉及版权问题,请及时与我们联系,我们将积极配合处理。同时,我们无法对文章内容的真实性、准确性及完整性进行完全保证,对于因文章内容而产生的任何后果,本账号不承担法律责任。转载仅出于传播目的,读者应自行对内容进行核实与判断。请谨慎参考文章信息,一切责任由读者自行承担。
延伸阅读