轉自:
https://www.cnblogs.com/no27/p/4849123.html
https://blog.csdn.net/ly416/article/details/78860522
VS2013創建Windows服務
一、創建服務
1、文件-》新建-》項目-》windows桌面-》windows服務,修改你要的項目名稱。我這不改名,仍叫WindowsService1,確定。
2、其中的Program.cs文件是入口,Service1.cs是服務文件,所有的邏輯都在這。Service1.cs包含兩部分,一部分是Designer,可以在這里面添加各種組件。一部分是后台文件,里面可以寫一些邏輯,默認包含3個方法:構造函數、OnStart和OnStop,還可以添加OnPause和OnContinue方法。
3、修改Service1.cs文件如下(可以自行添加一些邏輯代碼)
namespace WindowsService1 { public partial class Service1 : ServiceBase { public Service1() { InitializeComponent(); base.ServiceName = "KangryTest"; //設置服務名稱,與后面的安裝服務名稱要一致 } protected override void OnStart(string[] args) { //服務啟動時相關代碼。 } protected override void OnStop() { //服務關閉時相關代碼。 } } }
4、雙擊Service1.cs文件,進入設計頁面,對着空白處右鍵-》添加安裝器。
5、在安裝器的設計界面,出現兩個組件。點擊serviceProcessInstaller1,在右下角的屬性欄中,將Account修改為LocalSystem
6、選中ServiceInstaller1,右下角的屬性框中,將ServiceName修改成第3步的ServiceName,其他自行選擇。DelayedAutoStart表示開機后是否延遲啟動。Description表示服務的描述,DisplayName表示服務顯示名稱。ServicesDependedOn表示依賴的服務項。StartType表示啟動類型,分為自動啟動,手動啟動和禁用。
二、安裝服務
選中項目右鍵選擇“生成”,生成exe文件;
然后將從C:\Windows\Microsoft.NET\Framework\v4.0.30319中拷貝installutil.exe文件到生成目錄(bin/Debug目的使installutil.exe和dp0WindowsService1.exe在同一級目錄)下。在該目錄新建“安裝.bat”文件,使用記事本打開,輸入如下命令:
%~dp0InstallUtil.exe %~dp0WindowsService1.exe
pause
注意前每個命令前要加一個%~dp0,表示將目錄更改為當前目錄。倘若不加,可能會出錯。pause 一定要換行,否則報錯。
最后雙擊安裝.bat文件,就完成服務注冊了。
在我的電腦上右鍵選擇“管理”,打開“服務和應用程序”下的“服務”,就能看到我們注冊的服務了。
三、卸載服務
在該目錄新建“卸載.bat”文件,使用記事本打開,輸入如下命令:
%~dp0InstallUtil /u %~dp0WindowsService1.exe
pause
同樣pause也要換行。
如果在啟動過程中遇到如下問題,請將整個項目加上EVERYONE權限。
四、調試
在VS2013中選擇“調試”-“附加到進程”,如下:
這樣就可以調試了。
VS2015+Windows服務簡易教程
1、新建windows服務項目,我這里選擇的是Framework4.0,沒有選擇高版本是為了防止在服務在一些低版本系統上無法正常運行。
2、添加Windows服務的安裝程序。
在默認Service1設計器界面空白處點擊右鍵->添加安裝程序,系統會自動新建一個帶有默認配置的安裝程序類,如下圖:
新建完安裝程序后,需要給默認的serviceInstaller1和serviceProcessInstaller1做一些基本的屬性設置。如下圖:
以上工作完成,安裝程序配置完畢。
注意:如果不給服務添加安裝程序,后面是沒法把服務安裝至windows系統里的。
3、添加應用程序配置文件(如果有需要的話)。
如果項目有需要,一些應用程序的配置參數可以設置在此文件里(例如:數據庫連接字符串)。
4、編寫windows服務主代碼
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
using
System;
using
System.Collections.Generic;
using
System.ComponentModel;
using
System.Data;
using
System.Diagnostics;
using
System.Linq;
using
System.ServiceProcess;
using
System.Text;
using
System.IO;
namespace
OrganizClientSocketService
{
public
partial
class
Service1 : ServiceBase
{
public
Service1()
{
InitializeComponent();
System.Timers.Timer timer =
new
System.Timers.Timer();
timer.Elapsed +=
new
System.Timers.ElapsedEventHandler(TimedEvent);
timer.Interval = 5000;
//每5秒執行一次
timer.Enabled =
true
;
}
//定時執行事件
private
void
TimedEvent(
object
sender, System.Timers.ElapsedEventArgs e)
{
//業務邏輯代碼
}
protected
override
void
OnStart(
string
[] args)
{
this
.WriteLog(
"搜才Organiz客戶端數據同步服務:【服務啟動】"
);
}
protected
override
void
OnStop()
{
this
.WriteLog(
"搜才Organiz客戶端數據同步服務:【服務停止】"
);
}
protected
override
void
OnShutdown()
{
this
.WriteLog(
"搜才Organiz客戶端數據同步服務:【計算機關閉】"
);
}
#region 記錄日志
/// <summary>
/// 記錄日志
/// </summary>
/// <param name="msg"></param>
private
void
WriteLog(
string
msg)
{
//string path = @"C:\log.txt";
//該日志文件會存在windows服務程序目錄下
string
path = AppDomain.CurrentDomain.BaseDirectory +
"\\log.txt"
;
FileInfo file =
new
FileInfo(path);
if
(!file.Exists)
{
FileStream fs;
fs = File.Create(path);
fs.Close();
}
using
(FileStream fs =
new
FileStream(path, FileMode.Append, FileAccess.Write))
{
using
(StreamWriter sw =
new
StreamWriter(fs))
{
sw.WriteLine(DateTime.Now.ToString() +
" "
+ msg);
}
}
}
#endregion
}
}
|
5、編譯生成,安裝windows服務至Windows系統。
完成開發后,對整各項目進行編譯生成。在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