看个粟子:
1、“新建项目”——“Window服务”
生成的目录结构
双击“MainService.cs”,右键点击“添加安装程序”,自动会生成Projectinstaller.cs文件以及两个安装组件,对两个组件更名并做属性设置:
对服务的启动与停止添加代码
using System; using System.Diagnostics; using System.IO; using System.ServiceProcess; using System.Timers; namespace MainService { public partial class MainService : ServiceBase { private Timer time = new Timer(); public MainService() { InitializeComponent(); } protected override void OnStart(string[] args) { WriteLog("服务启动,时间:" + DateTime.Now.ToString("HH:mm:ss") + " "); time.Elapsed += new System.Timers.ElapsedEventHandler(MethodEvent); time.Interval = 2 * 1000;//时间间隔为2秒钟 time.Start(); } protected override void OnStop() { WriteLog("服务停止,时间:" + DateTime.Now.ToString("HH:mm:ss") + " "); } private void MethodEvent(object source, System.Timers.ElapsedEventArgs e) { time.Enabled = false; string result = string.Empty; string startTime = DateTime.Now.ToString("HH:mm:ss"); try { //......... result = "执行成功,时间为:" + startTime; } catch (Exception exp) { result = "失败,原因:" + exp.Message; } finally { WriteLog(result); time.Enabled = true; } } /// <summary> /// 日志记录 /// </summary> /// <param name="logInfo"></param> public void WriteLog(string logInfo) { try { string logDirectory = AppDomain.CurrentDomain.BaseDirectory + "\Logs"; if (!Directory.Exists(logDirectory)) { Directory.CreateDirectory(logDirectory); } string filePath = logDirectory + "\" + DateTime.Now.ToString("yyyy-MM-dd") + ".txt"; File.AppendAllText(filePath, logInfo); } catch { } } } }
添加windows窗体应用程序,命名为:InstallService
对启动程序添加代码:
using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Text; namespace InstallService { class Program { static void Main(string[] args) { Console.WriteLine("这是Windows应用程序"); Console.WriteLine("请选择,[1]安装服务 [2]卸载服务 [3]退出"); var rs = int.Parse(Console.ReadLine()); switch (rs) { case 1: //取当前可执行文件路径,加上"s"参数,证明是从windows服务启动该程序 var path = Process.GetCurrentProcess().MainModule.FileName; Process.Start("sc", "create myserver binpath= "" + path + "" displayName=MainService start= auto"); //因sc命令安装后未看到描述,我怀疑安装的服务不一定是我所创建的MainService服务项目,这为添加描述 Process.Start("sc", "description myserver "利用空闲的网络带宽在后台传输文件。如果服务被停用,例如 Windows Update 和 MSN Explorer 的功能将无法自动下载程序和其他信息。如果此服务被禁用,任何依赖它的服务如果没有容错技术以直接通过 IE 传输文件,一旦 BITS 被禁用,就可能无法传输文件。""); Console.WriteLine("安装成功"); Console.Read(); break; case 2: Process.Start("sc", "delete myserver"); Console.WriteLine("卸载成功"); Console.Read(); break; case 3: break; } } } }
启动程序:
1安装后
运行“services.msc"打开服务管理器
我手动启动失败
所以我怀疑我安装的只是一个名字,与我添加的服务没有什么关系
选2
卸载成功
可看net命名安装与卸载可参看:http://www.cnblogs.com/qk2014/p/4869675.html
windows服务操作命令有sc和net 两个命令;
使用sc命令:
1 修改服务启动类型
sc config 服务名 start= demand (设置服务为手动启动)
start= auto (设置服务为自动启动)
start= disabled (设置服务为禁用)
2 安装服务:sc create 服务名
3 停止服务:sc stop 服务名
4 卸载服务:sc delete 服务名(卸载前先停止服务)
使用net命令
查看运行的服务: net start
启动服务: net start 服务名
停止服务: net stop 服务名
卸载服务: 服务名 -uninstall (卸载前先停止服务)
虽然2个都能达到停止服务和启动服务的效果,但是在重启服务时,就是使用批处理先stop后start来实现重启时,如果服务处于启动状态使用sc的stop后start,结果服务不能启动,因为sc命令在执行stop后不会等待马上继续执行批处理下面的语句,这时服务正在处于停止操作状态,所以start命令不能启动。
net命令在stop时会停止等待,在服务完全停止后再继续执行批处理后面的语句,所以net的重启命令就会正常。
windows服务安装与卸载批处理指令:
安装:
%SystemRoot%Microsoft.NETFrameworkv4.0.30319installutil.exe "D:projectpsssYGPS.PSSYGPS.PSS.PrintServiceinDebugYGPS.PSS.PrintService.exe" Net Start WinPrintService sc config WinPrintService start= auto pause
卸载:
sc stop WinPrintService %SystemRoot%Microsoft.NETFrameworkv4.0.30319installutil.exe /u "D:projectpssYGPS.PSSYGPS.PSS.PrintServiceinDebugYGPS.PSS.PrintService.exe" pause
bat设置windows计划任务
设置定时任务 @echo off set NAME=dailybackup set TIME=20:01:00 set DAY=MON,TUE,WED,THU,FRI,SAT,SUN set COMMAND=cscript.exe %~dp0dailybak.vbs %SystemDrive% cd %windir% asks if exist %NAME%.job del %NAME%.job schtasks /create /tn %NAME% /tr "%COMMAND%" /sc weekly /d %DAY% /st %TIME% /ru system
在含有看空格的参数或则路径前面加上 " 进行转义,这样就ok demo: schtasks /create /sc minute /mo 30 /tn "finaltest" /tr ""d:program filesmth.bat"" "'20' '302'"
Windows_批处理+任务计划实现文件夹定时备份
SVN.bat
@echo off echo 本批处理为Ls_man原创 echo 更多精彩博文请访问http://blog.csdn.net/ls_man echo 或登陆求知域官网http://www.qqextra.com color 0b & cls echo 设置要备份的文件夹... set "pbuf=D:VisualSVN_Repositories" echo 设置备份文件存放文件夹... set "tbuf=G:Backup_VisualSVN_Repositories" echo 初始化压缩程序设置... cd C: cd C:Program FilesWinRAR set yes=ok echo 压缩程序在C:Program FilesWinRARWinRAR.exe echo 设置备份文件名(以星期几命名,即备份文件只保存最近一周)... set name=%date% set name=%name:~-3% set name=svn_backup_%name% echo 是否存在同名文件,若存在则删除同名文件... if exist %tbuf%\%name%.rar del %tbuf%\%name%.rar echo 开始执行压缩备份... rar a -r -ed -esh %tbuf%\%name%.rar %pbuf%*.* echo 备份完毕!
由于要备份的文件夹和存放备份的文件夹及WinRaR的安装路径可能不同,根据实际情况修改即可。
下一步就是添加任务计划,打开控制面板-任务计划-添加任务计划,设置每天执行备份.bat,最好在晚上执行如凌晨1点。
扩展:
http://www.cnblogs.com/qk2014/p/4869675.html
http://www.cnblogs.com/testlife007/p/4396248.html
http://www.cnblogs.com/DelphiFan/archive/2009/03/10/1645579.html
http://www.cnblogs.com/a311300/archive/2010/12/30/1922229.html
http://www.cnblogs.com/wpcnblog/p/4732390.html
http://www.cnblogs.com/zcy-628/archive/2012/08/22/2650805.html
http://www.cnblogs.com/smileberry/p/4210245.html
http://www.cnblogs.com/knowledgesea/p/3616127.html
http://www.cnblogs.com/dongzhiquan/p/3231498.html
http://blog.csdn.net/ls_man