標籤:
1.建立windows服務項目
2.右鍵點擊Service1.cs,查看代碼, 用於編寫操作邏輯代碼
3.代碼中OnStart用於執行服務事件
public partial class Service1 : ServiceBase { string logFilePath = ""; LogHelper logHelper; WendyWuBll bll = new WendyWuBll(); public Service1() { logFilePath = ConfigurationManager.AppSettings["syncFeefoDataLog"]; logHelper = new LogHelper(logFilePath); InitializeComponent(); AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException); } void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) { try { Exception ex = e.ExceptionObject as Exception; logHelper.WriteLine("來自“MonitorOnServer”的全域異常。" + ex.Message + "詳細資料如下:" + Environment.NewLine + "[InnerException]" + ex.InnerException + Environment.NewLine + "[Source]" + ex.Source + Environment.NewLine + "[TargetSite]" + ex.TargetSite + Environment.NewLine + "[StackTrace]" + ex.StackTrace); } catch { } } private delegate void NewTaskDelegate(); protected override void OnStart(string[] args) { EventLog.WriteEntry("同步feefo資料服務啟動"); //在系統事件查看器裡的應用程式事件裡來源的描述 logHelper.WriteLine("服務啟動"); //自訂日誌 logHelper.WriteLine("服務版本1.1"); NewTaskDelegate task = bll.IntData; //使用BeginInvoke方法非同步呼叫newTask方法,並傳入2000作為newTask的參數 IAsyncResult asyncResult = task.BeginInvoke( null, null); System.Timers.Timer t = new System.Timers.Timer(); t.Interval = 1000; t.Elapsed+=new System.Timers.ElapsedEventHandler(ChkSrv);//到達時間時候執行事件 t.AutoReset = true;//設定執行一次(false)還是一直執行(true) t.Enabled = true;//是否執行system.Timers.Timer.ElapseEventHander事件 bll.SetServiceStatus("WendyWuAutoService", "Running"); } private void ChkSrv(object sender, System.Timers.ElapsedEventArgs e) { int intHour = e.SignalTime.Hour; int intMinute = e.SignalTime.Minute; int intSecond = e.SignalTime.Second; if ((intMinute == 00 && intSecond == 00) || (intMinute == 30 && intSecond == 00))//定時設定,判斷每天八點執行 { try { logHelper.WriteLine("開始從feefo同步資料"); System.Timers.Timer tt = (System.Timers.Timer)sender; bll.SyncDataFromFeefo(); logHelper.WriteLine("從feefo同步資料完成"); } catch(Exception ex) { logHelper.WriteLine(ex.Message); } } else if ((intMinute == 15 && intSecond == 00) || (intMinute == 25 && intSecond == 00) || (intMinute == 35 && intSecond == 00) || (intMinute == 45 && intSecond == 00) || (intMinute == 55 && intSecond == 00)) { try { logHelper.WriteLine("自動郵件發送服務啟動" + DateTime.Now.ToString()); bll.SendEmail(); logHelper.WriteLine("郵件發送完成" + DateTime.Now.ToString()); } catch(Exception ex) { logHelper.WriteLine(ex.Message); } } } protected override void OnStop() { logHelper.WriteLine("服務停止"); EventLog.WriteEntry("同步feefo資料服務停止"); bll.SetServiceStatus("WendyWuAutoService", "Stopped"); } }
安裝服務配置
1.開啟Service1.cs視圖介面
2.在視圖內右鍵-->添加安裝程式
3.
項目中添加了ProjectInstaller.cs檔案,該檔案中視圖自動會添加倆個組件
serviceProcessInstaller1
serviceInstaller1
4.選中serviceProcessInstaller1組件,查看屬性,設定account為LocalSystem
5. 選中serviceInstaller1組件,查看屬性
設定ServiceName的值, 該值表示在系統服務中的名稱
設定StartType, 如果為Manual則手動啟動,預設停止,如果為Automatic為自動啟動
設定Description,添加服務描述
安裝服務
1.點擊 開始,運行中輸入cmd,擷取命令提示字元
win7需要已管理員的身份啟動,否則無法安裝
2.
輸入 cd C:\Windows\Microsoft.NET\Framework\v4.0.30319 斷行符號
切 換目前的目錄,此處需要注意的是,在C:\Windows\Microsoft.NET\Framework目錄下有很多類似版本,具體去哪個目錄要看項目 的運行環境,例 如果是.net framework2.0則需要輸入 cd C:\Windows\Microsoft.NET\Framework\v2.0.50727
3.
輸入 InstallUtil.exe E:\TestApp\Winform\WinServiceTest\WinServiceTest\bin\Debug\WinServiceTest.exe 斷行符號
說明:E:\TestApp\Winform\WinServiceTest\WinServiceTest\bin\Debug\WinServiceTest.exe表示項目產生的exe檔案位置
4.開啟服務,就可以看到已經安裝的服務了
卸載服務
-
卸載很簡單,開啟cmd, 直接輸入 sc delete WinServiceTest便可
C#建立Windows服務與安裝-圖解