1、创建windows服务
说明:
a)description 服务描述,直接显示到windows服务列表中的描述;
b)displayname 服务显示名称,直接显示到windows服务列表中的名称;
c)servicename 服务进程名称,安装与卸载服务时的唯一标识。
单击“serviceprocessinstaller1”,在其属性窗口中设置account帐号方式,建议为localservice(当然也可以account属性改为 localsystem,这样,不论是以哪个用户登录的系统,服务总会启动)。
编写安装和卸载脚本,并将放在bin/debug或bin/release文件夹下。
安装脚本
1
2
3
4
|
%systemroot%\microsoft.net\framework\v4.0.30319\installutil.exe %~dp0exe程序的名称.exe
net start 服务名称
sc config 服务名称 start= auto
pause
|
这里注意,在exe程序的名称前面有 %~dp0 这是代表当前位置
服务名称 对应 上面我们创建服务时servername的名称
卸载脚本
1
2
|
%systemroot%\microsoft.net\framework\v4.0.30319\installutil.exe /u %~dp0exe程序的名称.exe
pause
|
同时还要注意一下,本人用的.net4.0的版本,所以\microsoft.net\framework\v4.0.30319\installutil.exe 这一段要根据你机器安装.net的版本来定。
其实脚本主要是通过installutil.exe 来进行安装和卸载服务的,同时此处涉及的批处理命令不多。
2、调试windows服务
在项目中不用启动windows服务项目,而是直接附加进程来进行调试。
在可用进程中,查找到你刚才通过脚本安装的服务就可以了。
再发一个写入服务代码的demo
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
|
public partial class mmsserver : servicebase
{
private timer time = new timer();
public mmsserver()
{
initializecomponent();
}
protected override void onstart( string [] args)
{
#if debug
if (!debugger.isattached)
debugger.launch();
debugger. break ();
#endif
writelog( "服务启动,时间:" + datetime.now.tostring( "hh:mm:ss" ) + "\r\n" );
time.elapsed += new elapsedeventhandler(methodevent);
time.interval = 3 * 1000;
time.start();
}
protected override void onpause()
{
#if debug
if (!debugger.isattached)
debugger.launch();
debugger. break ();
#endif
writelog( "服务暂停,时间:" + datetime.now.tostring( "hh:mm:ss" ) + "\r\n" );
base .onpause();
}
protected override void oncontinue()
{
#if debug
if (!debugger.isattached)
debugger.launch();
debugger. break ();
#endif
writelog( "服务恢复,时间:" + datetime.now.tostring( "hh:mm:ss" ) + "\r\n" );
base .oncontinue();
}
protected override void onshutdown()
{
writelog( "计算机关闭,时间:" + datetime.now.tostring( "hh:mm:ss" ) + "\r\n" );
base .onshutdown();
}
private void methodevent( object source, system.timers.elapsedeventargs e)
{
time.enabled = false ;
string result = string .empty;
try
{
//.........
result = "执行成功,时间:" + datetime.now.tostring( "hh:mm:ss" ) + "\r\n" ;
}
catch (exception ex)
{
result = "执行失败,原因:" + ex.message + "\r\n" ;
}
finally
{
writelog(result);
time.enabled = true ;
}
}
protected override void onstop()
{
#if debug
if (!debugger.isattached)
debugger.launch();
debugger. break ();
#endif
writelog( "服务停止,时间:" + datetime.now.tostring( "hh:mm:ss" ) + "\r\n" );
}
/// <summary>
/// 日志记录
/// </summary>
/// <param name="loginfo"></param>
private 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
{
}
}
}
|
以上就是关于vs2013创建windows服务与调试服务的全部内容了,希望大家以后多多支持服务器之家