看個粟子:
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") + "\r\n"); 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") + "\r\n"); } 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.NET\Framework\v4.0.30319\installutil.exe "D:\project\psss\YGPS.PSS\YGPS.PSS.PrintService\bin\Debug\YGPS.PSS.PrintService.exe" Net Start WinPrintService sc config WinPrintService start= auto pause
卸載:
sc stop WinPrintService %SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe /u "D:\project\pss\YGPS.PSS\YGPS.PSS.PrintService\bin\Debug\YGPS.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%\tasks\ 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 file\smth.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 Files\WinRAR set yes=ok echo 壓縮程序在C:\Program Files\WinRAR\WinRAR.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
