好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

C#添加Windows服务 定时任务

本文实例为大家分享了c#添加windows服务的具体方法,供大家参考,具体内容如下

源码下载地址: windowsservice1.rar

步骤一、 创建服务项目。

步骤二、 添加安装程序。

步骤三、 服务属性设置 【serviceinstaller1】。

4.1 添加定时任务

?

public partial class sapsyn : servicebase

  {

  system.timers.timer timer1; //计时器

  system.timers.timer timer2; //计时器

  system.timers.timer timer3; //计时器

  system.timers.timer timer4; //计时器

  public sapsyn()

  {

   initializecomponent();

  }

 

  protected override void onstart( string [] args)

  {

  

   timer1 = new system.timers.timer();

   timer1.interval = 8000; //设置计时器事件间隔执行时间

   timer1.elapsed += new system.timers.elapsedeventhandler(tmstart1_elapsed);

   timer1.enabled = true ;

 

   timer2 = new system.timers.timer();

   timer2.interval = 8000; //设置计时器事件间隔执行时间

   timer2.elapsed += new system.timers.elapsedeventhandler(tmstart2_elapsed);

   timer2.enabled = true ;

 

   timer3 = new system.timers.timer();

   timer3.interval = 8000; //设置计时器事件间隔执行时间

   timer3.elapsed += new system.timers.elapsedeventhandler(tmstart3_elapsed);

   timer3.enabled = true ;

 

   timer4 = new system.timers.timer();

   timer4.interval = 8000; //设置计时器事件间隔执行时间

   timer4.elapsed += new system.timers.elapsedeventhandler(tmstart4_elapsed);

   timer4.enabled = true ;

 

  }

 

  protected override void onstop() //服务停止执行

  {

   using (system.io.streamwriter sw = new system.io.streamwriter( "c:\\log.txt" , true ))

   {

   sw.writeline(datetime.now.tostring( "yyyy-mm-dd hh:mm:ss " ) + "stop." );

   }

   this .timer1.enabled = false ;

   this .timer2.enabled = false ;

   this .timer3.enabled = false ; 

   this .timer4.enabled = false ;

  }

 

 

  protected override void onpause()

  {

   //服务暂停执行代码

   base .onpause();

  }

  protected override void oncontinue()

  {

   //服务恢复执行代码

   base .oncontinue();

  }

  protected override void onshutdown()

  {

   //系统即将关闭执行代码

   base .onshutdown();

  }

 

 

  private void tmstart1_elapsed( object sender, system.timers.elapsedeventargs e)

  {

   //执行sql语句或其他操作

   using (system.io.streamwriter sw = new system.io.streamwriter( "c:\\" + 1 + "log.txt" , true ))

   {

   sw.writeline(datetime.now.tostring( "yyyy-mm-dd hh:mm:ss " ) + "start." );

   }

  }

  private void tmstart2_elapsed( object sender, system.timers.elapsedeventargs e)

  {

   //执行sql语句或其他操作

   using (system.io.streamwriter sw = new system.io.streamwriter( "c:\\" + 2 + "log.txt" , true ))

   {

   sw.writeline(datetime.now.tostring( "yyyy-mm-dd hh:mm:ss " ) + "start." );

   }

  }

  private void tmstart3_elapsed( object sender, system.timers.elapsedeventargs e)

  {

   //执行sql语句或其他操作

   using (system.io.streamwriter sw = new system.io.streamwriter( "c:\\" + 3 + "log.txt" , true ))

   {

   sw.writeline(datetime.now.tostring( "yyyy-mm-dd hh:mm:ss " ) + "start." );

   }

  }

 

  private void tmstart4_elapsed( object sender, system.timers.elapsedeventargs e)

  {

   //执行sql语句或其他操作

   using (system.io.streamwriter sw = new system.io.streamwriter( "c:\\" + 4 + "log.txt" , true ))

   {

   sw.writeline(datetime.now.tostring( "yyyy-mm-dd hh:mm:ss " ) + "start." );

   }

  }

 

 

 

  }

4.2 设置服务启动方式为自动启动

?

[runinstaller( true )]

  public partial class projectinstaller : system.configuration.install.installer

  {

  public projectinstaller()

  {

   initializecomponent();

   this 测试数据mitted += new installeventhandler(projectinstaller_committed);

  }

  private void projectinstaller_committed( object sender, installeventargs e)

  {

   //参数为服务的名字

   system.serviceprocess.servicecontroller controller = new system.serviceprocess.servicecontroller( "servicesapsyn" );

   controller.start();

  }

  private void serviceinstaller1_afterinstall( object sender, installeventargs e)

  {

 

  }

  }

步骤五、 脚本配置。

安装服务脚本

 

复制代码 代码如下:

%systemroot%\microsoft.net\framework\v4.0.30319\installutil.exe windowsservicetest.exenet start servicetestsc config servicetest start= auto

 

卸载服务脚本

 

复制代码 代码如下:

%systemroot%\microsoft.net\framework\v4.0.30319\installutil.exe /u windowsservicetest.exe

 

5.1 停止或启动服务的代码

?

public partial class form1 : form

  {

  public form1()

  {

   initializecomponent();

  }

  public string thispath = application.startuppath;

  public string propath = "" ;

  private void form1_load( object sender, eventargs e)

  {

   this .text = "启动服务" ;

  }

 

  /// <summary>

  /// 启动服务

  /// </summary>

  /// <param name="sender"></param>

  /// <param name="e"></param>

  private void button1_click( object sender, eventargs e)

  {

   cursor = cursors.waitcursor;

   string starpath = @"%systemroot%\microsoft.net\framework\v4.0.30319\installutil.exe " + propath;

 

 

   filestream fs = new filestream(thispath + "\\install.bat" , filemode.create);

   streamwriter sw = new streamwriter(fs);

   try

   {

   sw.writeline(starpath);

   sw.writeline( "net start servicetest" );

   sw.writeline( "sc config servicetest start= auto" );

   }

   catch (exception ex)

   {

   messagebox.show(ex.message.tostring());

   }

   finally

   {

   sw.close();

   fs.close();

   }

   system.diagnostics.process.start(thispath + "\\install.bat" );

   this .text = "启动服务:你选择的服务已经启动。" ;

   cursor = cursors. default ;

  }

 

  /// <summary>

  /// 停止服务

  /// </summary>

  /// <param name="sender"></param>

  /// <param name="e"></param>

  private void button2_click( object sender, eventargs e)

  {

   cursor = cursors.waitcursor;

 

   string starpath = @"%systemroot%\microsoft.net\framework\v4.0.30319\installutil.exe /u " + propath;

 

   filestream fs = new filestream(thispath + "\\uninstall.bat" , filemode.create);

   streamwriter sw = new streamwriter(fs);

   try

   {

   sw.writeline(starpath);

   }

   catch (exception ex)

   {

   messagebox.show(ex.message.tostring());

   }

   finally

   {

   sw.close();

   fs.close();

   }

   system.diagnostics.process.start(thispath + "\\uninstall.bat" );

   this .text = "启动服务:你选择的服务已经卸载。" ;

   cursor = cursors. default ;

  }

 

 

 

  private void button3_click( object sender, eventargs e)

  {

   ///选择文件框 对象

   openfiledialog ofd = new openfiledialog();

   //打开时指定默认路径

   ofd.initialdirectory = @"c:\documents and settings\administrator.icbcoa-6e96e6be\桌面" ;

   //如果用户点击确定

   if (ofd.showdialog() == dialogresult.ok)

   {

   //将用户选择的文件路径 显示 在文本框中

   textbox1.text = ofd.filename;

   propath = textbox1.text;

   }

   if (file.exists(thispath + "\\uninstall.bat" ))

   {

   file.delete(thispath + "\\uninstall.bat" );

   }

   file.create(thispath + "\\uninstall.bat" ).close();

   if (file.exists(thispath + "\\install.bat" ))

   {

   file.delete(thispath + "\\install.bat" );

   }

   file.create(thispath + "\\install.bat" ).close();

  }

 

 

 

  //读写文本 - 写入数据按钮

  private void buttonwrite_click( string filepath)

  {

  

  }

 

 

  /// <summary>

  /// 运行cmd命令

  /// </summary>

  /// <param name="cmd">命令</param>

  /// <returns></returns>

  public static string cmd( string [] cmd)

  {

   process p = new process();

   p.startinfo.filename = "cmd.exe" ;

   p.startinfo.useshellexecute = false ;

   p.startinfo.redirectstandardinput = true ;

   p.startinfo.redirectstandardoutput = true ;

   p.startinfo.redirectstandarderror = true ;

   p.startinfo.createnowindow = true ;

   p.start();

   p.standardinput.autoflush = true ;

   for ( int i = 0; i < cmd.length; i++)

   {

   p.standardinput.writeline(cmd[i].tostring());

   }

   p.standardinput.writeline( "exit" );

   string strrst = p.standardoutput.readtoend();

   p.waitforexit();

   p.close();

   return strrst;

  }

 

  /// <summary>

  /// 关闭进程

  /// </summary>

  /// <param name="procname">进程名称</param>

  /// <returns></returns>

  public static bool closeprocess( string procname)

  {

   bool result = false ;

   system.collections.arraylist proclist = new system.collections.arraylist();

   string tempname = "" ;

   int begpos;

   int endpos;

   foreach (system.diagnostics.process thisproc in system.diagnostics.process.getprocesses())

   {

   tempname = thisproc.tostring();

   begpos = tempname.indexof( "(" ) + 1;

   endpos = tempname.indexof( ")" );

   tempname = tempname.substring(begpos, endpos - begpos);

   proclist.add(tempname);

   if (tempname == procname)

   {

    if (!thisproc.closemainwindow())

    thisproc.kill(); // 当发送关闭窗口命令无效时强行结束进程

    result = true ;

   }

   }

   return result;

  }

 

  }

5.2 form1.designer.cs 代码

?

partial class form1

  {

  /// <summary>

  /// 必需的设计器变量。 form1.designer.cs

  /// </summary>

  private system测试数据ponentmodel.icontainer components = null ;

 

  /// <summary>

  /// 清理所有正在使用的资源。

  /// </summary>

  /// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>

  protected override void dispose( bool disposing)

  {

   if (disposing && (components != null ))

   {

   components.dispose();

   }

   base .dispose(disposing);

  }

 

  #region windows 窗体设计器生成的代码

 

  /// <summary>

  /// 设计器支持所需的方法 - 不要

  /// 使用代码编辑器修改此方法的内容。

  /// </summary>

  private void initializecomponent()

  {

   system测试数据ponentmodel测试数据ponentresourcemanager resources = new system测试数据ponentmodel测试数据ponentresourcemanager( typeof (form1));

   this .button1 = new system.windows.forms.button();

   this .button2 = new system.windows.forms.button();

   this .textbox1 = new system.windows.forms.textbox();

   this .button3 = new system.windows.forms.button();

   this .suspendlayout();

   //

   // button1

   //

   this .button1.font = new system.drawing.font( "微软雅黑" , 12f, system.drawing.fontstyle.regular, system.drawing.graphicsunit.point, (( byte )(134)));

   this .button1.location = new system.drawing.point(12, 90);

   this .button1.name = "button1" ;

   this .button1.size = new system.drawing.size(134, 60);

   this .button1.tabindex = 0;

   this .button1.text = "启动服务" ;

   this .button1.usevisualstylebackcolor = true ;

   this .button1.click += new system.eventhandler( this .button1_click);

   //

   // button2

   //

   this .button2.font = new system.drawing.font( "微软雅黑" , 12f, system.drawing.fontstyle.regular, system.drawing.graphicsunit.point, (( byte )(134)));

   this .button2.location = new system.drawing.point(280, 90);

   this .button2.name = "button2" ;

   this .button2.size = new system.drawing.size(134, 60);

   this .button2.tabindex = 0;

   this .button2.text = "停止服务" ;

   this .button2.usevisualstylebackcolor = true ;

   this .button2.click += new system.eventhandler( this .button2_click);

   //

   // textbox1

   //

   this .textbox1.font = new system.drawing.font( "微软雅黑" , 10.5f, system.drawing.fontstyle.regular, system.drawing.graphicsunit.point, (( byte )(134)));

   this .textbox1.forecolor = system.drawing.color.maroon;

   this .textbox1.location = new system.drawing.point(108, 13);

   this .textbox1.multiline = true ;

   this .textbox1.name = "textbox1" ;

   this .textbox1.size = new system.drawing.size(306, 67);

   this .textbox1.tabindex = 2;

   //

   // button3

   //

   this .button3.font = new system.drawing.font( "微软雅黑" , 10.5f, system.drawing.fontstyle.underline, system.drawing.graphicsunit.point, (( byte )(134)));

   this .button3.forecolor = system.drawing.color.blue;

   this .button3.location = new system.drawing.point(12, 12);

   this .button3.name = "button3" ;

   this .button3.size = new system.drawing.size(90, 68);

   this .button3.tabindex = 3;

   this .button3.text = "请选择服务路径" ;

   this .button3.usevisualstylebackcolor = true ;

   this .button3.click += new system.eventhandler( this .button3_click);

   //

   // form1

   //

   this .autoscaledimensions = new system.drawing.sizef(6f, 12f);

   this .autoscalemode = system.windows.forms.autoscalemode.font;

   this .clientsize = new system.drawing.size(419, 155);

   this .controls.add( this .button3);

   this .controls.add( this .textbox1);

   this .controls.add( this .button2);

   this .controls.add( this .button1);

   this .icon = ((system.drawing.icon)(resources.getobject( "$this.icon" )));

   this .name = "form1" ;

   this .text = "选择服务程序" ;

   this .load += new system.eventhandler( this .form1_load);

   this .resumelayout( false );

   this .performlayout();

 

  }

 

  #endregion

 

  private system.windows.forms.button button1;

  private system.windows.forms.button button2;

  private system.windows.forms.textbox textbox1;

  private system.windows.forms.button button3;

  }

源码下载地址: windowsservice1.rar

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

dy("nrwz");

查看更多关于C#添加Windows服务 定时任务的详细内容...

  阅读:43次