基於0起步來創建一個服務,做到簡單的記錄時間日志功能,其具體招行方法可自行添加。
1.創建服務

2.刪除默認服務文件

3.添加自己的服務文件

4.更改啟動項目

5. 引用 using System.Timers;並添加FileClass類

FileClass類
6. 添加上步中需要的InitService()方法
/// <summary>
/// 初始化服務參數
/// </summary>
private void InitService()
{
base.CanShutdown = true;
base.CanStop = true;
base.CanPauseAndContinue = true;
this.ServiceName = MainService.serviceName;
this.AutoLog = false;//為了使用自定義日志,必須將 AutoLog 設置為 false
tim = new System.Timers.Timer();
tim.Elapsed += new ElapsedEventHandler(tim_Elapsed);
tim.Interval = 5000;
tim.AutoReset = true;
}
7. 解決System不包含windows屬性問題,引用程序集。

8.添加上面引用 的 tim_Elapsed 定時方法
private void tim_Elapsed(object sender, EventArgs e)
{
StartThread();
}
/// <summary>
/// 開始任務
/// </summary>
private void StartThread()
{
MessageAdd(serviceName + " " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
}
/// <summary>
/// 日志記錄
/// </summary>
/// <param name="serviceName">內容</param>
public void MessageAdd(string str)
{
try
{
fileclass.WriteLogFile(logPath, str);//寫入記錄日志
}
catch
{
}
}
9.此時生成解決方案是成功的
10.在OnStart等中寫入自己的方法,這里用日志記錄
protected override void OnStart(string[] args)
{
try
{
this.tim.Enabled = true;
this.tim.Start();
}
catch (Exception ex)
{
MessageAdd("OnStart錯誤:" + ex.Message);
}
MessageAdd(serviceName + "已成功啟動!");
}
protected override void OnStop()
{
try
{
this.tim.Stop();
}
catch (Exception ex)
{
MessageAdd("OnStop錯誤:" + ex.Message);
}
MessageAdd(serviceName + "已停止!");
}
protected override void OnContinue()
{
this.tim.Start();
base.OnContinue();
}
protected override void OnPause()
{
this.tim.Stop();
base.OnPause();
}
11.給服務添加安裝程序。右鍵鼠標單擊MainService.cs[設計]*選項卡選項“添加安裝程序”。

12.可以看見項目中多了如下文件和組件,serviceProcessInstaller1、serviceInstaller1是自動生成的

13.設置組件serviceInstaller1的主要屬性,StartType: AutoMatic自動啟動;ServiceName: 服務系統標識,在cmd命令中執行sr start/stop/query等等命令時候使用,用來唯一標識一個Window服務

14.設置組件serviceProcessInstaller1的主要屬性,Accout:賬戶類型,LocalSystem本地系統服務;

15.設置服務安裝后“允許和桌面進行交互”,
需要在ProjectInstaller.cs中添加如下代碼。
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration.Install;
using System.Linq;
namespace TerminalTrance
{
[RunInstaller(true)]
public partial class ProjectInstaller : System.Configuration.Install.Installer
{
public ProjectInstaller()
{
InitializeComponent();
}
protected override void OnAfterInstall(IDictionary savedState)
{
try
{
base.OnAfterInstall(savedState);
// 允許服務桌面交互
System.Management.ManagementObject myService = new System.Management.ManagementObject(string.Format("Win32_Service.Name='{0}'", this.serviceInstaller1.ServiceName));
System.Management.ManagementBaseObject changeMethod = myService.GetMethodParameters("Change");
changeMethod["DesktopInteract"] = true;
System.Management.ManagementBaseObject OutParam = myService.InvokeMethod("Change", changeMethod, null);
}
catch (Exception ex)
{
}
}
}
}
16.Windows服務的安裝和卸載
代碼寫完后,編譯通過后,就可以安裝、卸載、調試服務了。
在執行安裝或卸載服務前,我有把服務需要的相關文件,復制到C:\Service\下面或其他路徑。一旦安裝完成后,此目錄不能變更,否則不能卸載該服務和服務運行會報錯。
安裝、卸載很簡單,只要在VS命令行導航到,服務程序的路徑。然后運行以下命令就OK了。
打開如圖:

安裝服務:installutil C:\Service\TerminalTrance.exe
卸載服務:installutil /u C:\Service\TerminalTrance.exe
調試的話,只能先安裝啟動服務,然后將該服務附加到進程,就可以調試了。安裝好服務后,就可以在win7服務管理里面,管理剛剛啟動的服務了。
安裝成功后可在服務中看到

在服務程序中可以看到添加的服務

可以看到程序的日志記錄

另外一個方法是生成安裝exe程序
1.解決方案右鍵=》新建項目=》選擇安裝程序

2.安裝項目右鍵=》添加=》項目輸出,選擇主項目

3.安裝項目右鍵=》視圖=》自定義操作
4.自定義操作=》安裝右鍵=》選擇主輸出

5.卸載右鍵=》選擇主輸出
6.若有文件需要添加到安裝后的文件夾中=》點擊應用程序文件夾=》添加=》文件,選擇文件。安裝后就會生成指定文件。

7.生成程序,完成,Setup文件夾中找到exe安裝文件執行就 OK了。卸載也是執行此exe,按提示下一步就OK。
公眾號【一個碼農的日常】 技術群:319931204 1號群: 437802986 2號群: 340250479
出處: http://zhangs1986.cnblogs.com/
碼雲: https://gitee.com/huanzui
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。
完成開發后,對整各項目進行編譯生成。在windows服務開發文件夾“\bin\Debug”下,就是我們需要安裝的服務,建議把里面的所有文件拷貝至系統里的某個目錄進行安裝。
我是把整個個文件夾里的文件拷貝到c:\WindowService文件夾下。然后打開目錄C:\Windows\Microsoft.NET\Framework64\v4.0.30319,拷貝里面的InstallUtil.exe文件至c:\WindowService文件夾下)。
注意:我的系統是windows10,64位系統,我的服務也將安裝至64位系統下,所以我是進入C:\Windows\Microsoft.NET\Framework64\v4.0.30319目錄拷貝InstallUtil.exe文件。各位安裝的時候,根據你安裝的目標系統,來覺得是拷貝哪個framework哪個版本,具體是64位的還是32位的也由你系統決定。
做好以上工作后就可以安裝了,打開cdm就可執行安裝了(一定要以管理員身份運行喲,要不然安裝時會報“Windows服務安裝異常:System.Security.SecurityException: 未找到源,但未能搜索某些或全部事件”)。
以下是安裝命令、啟動服務命令、停止服務命令、卸載服務命令:
安裝命令:C:\WindowService\InstallUtil.exe C:\WindowService\OrganizClientSocketService.exe
啟動服務命令:net start 搜才Organiz客戶端數據同步服務
關閉服務命令:net stop 搜才Organiz客戶端數據同步服務
卸載服務命令:C:\WindowService\InstallUtil.exe -u C:\WindowService\OrganizClientSocketService.exe

