Visual Studio 2012的Windows Service服务安装方式
2020-12-13 14:12
标签:style blog http io color os ar 使用 sp windows服务应用程序是一种长期运行在操作系统后台的程序,它对于服务器环境特别适合,它没有用户界面,不会产生任何可视输出,任何用户输出都回被写进windows事件日志。计算机启动时,服务会自动开始运行,他们不要用户一定登陆才运行。 可以通过选择菜单“开始”-〉“控制面板”-〉“系统和安全”-〉”管理工具“ -〉“服务”来查看现有系统中的服务,如下图: 创建window 服务 新建一个window 服务项目MyService,如下图 从工具箱的组件表中拖动一个Timer对象到这个视图设计器上面。 设置Timer属性,Enable为true,Interval属性为3000毫秒 双击Timer事件,添加事件 其中OnStart和OnStop分别是服务器启动和停止后,所发生的事件操作方法,WriteLog是操作方法; 将服务程序service1.cs 切换到视图模式,用鼠标右键单击设计视图选择“添加安装程序”选项,此后在项目中自动增加了一个ProjectInstaller.cs 设置serviceInstaller1组件属性, ServiceName=MyServiceLog安装服务器名字; StartType=Automatic 开机自动启动 设计serviceProcessInstaller1的属性Account=LocalSystem; 运行编译,一个简单的windows服务已经开发完成 注:如果在代码中的文件路径写成如下“service.txt”,那么此时文件保存在C:\WINDOWS\system32文件夹中。 安装window服务 安装命令:InstallUtil.exe MyServiceLog.exe InstallUtil存在路径为:C:\WINDOWS\Microsoft.NET\Framework\.NET版本号 复制C:\WINDOWS\Microsoft.NET\Framework\版本号 路径中的InstallUtil.exe 到bin/debug或bin/release文件夹中,在命令行窗口中直接运行命令 InstallUtil.exe MyServiceLog.exe,在系统中注册这个服务,使它建立一个合适的注册项,如下图: 然后再window服务列表中,启动MyServiceLog服务 卸载window 服务 命令:InstallUtil.exe MyServiceLog.exe /u 如果修改这个服务,但是路径没有变化的话是不需要重新注册服务的,直接停止服务,然后用新的文件覆盖原来的文件即可,如果路径发生变化,应该先卸载这个服务,然后重新安装这个服务。 Window服务应用程序体系结构 .net framework对windows服务提供了更多的支持,在命名空间System.ServiceProcess下. 包括类如下: ServiceBase 所有Window服务的基类 ServiceController 该类的一个实例代表一个具体的windows服务 ServiceControllerPermission 用于控制ServiceController的使用权限 ServiceInstaller 用于执行对windows服务的安装 ServiceProcessInstaller 用于执行对windows服务的安装,与上类的不同的是,该类可以代表一个可以执行的windows服务的进程. ServiceBase类 当在服务应用程序中定义服务类时从 ServiceBase 派生。任何有用的服务均将重写 OnStart 和 OnStop 方法。对于其他功能,可以用特定行为重写 OnPause 和 OnContinue 来响应服务状态的更改。 服务是长时间运行的可执行文件,它不支持用户界面,在登录的用户帐户下可能无法运行。服务可以在没有任何用户登录计算机的情况下运行。 默认情况下,服务在“系统”帐户下运行,该帐户与“管理员”帐户不同。不能更改“系统”帐户的权限。或者,可以使用 ServiceProcessInstaller 指定运行服务时将使用的用户帐户。 一个可执行文件可以包含多项服务,但对每项服务均必须包含一个单独的 ServiceInstaller。ServiceInstaller 实例在系统中注册服务。安装程序还将每项服务与一个事件日志关联,您可以使用该日志记录服务命令。可执行文件中的 main() 函数定义哪些服务应该运行。服务的当前工作目录是系统目录,而不是可执行文件所位于的目录。 当启动某项服务时,系统将定位相应的可执行文件,并运行该服务的 OnStart 方法(它包含在可执行文件内)。但是,运行服务与运行可执行文件并不相同。可执行文件仅加载服务。服务则通过“服务控制管理器”访问(例如启动和停止)。 当您对服务首次调用“开始”时,可执行文件调用 ServiceBase 派生类的构造函数。在构造函数执行之后将立即调用 OnStart 命令处理方法。在服务首次加载之后,构造函数不会再次执行,因此有必要将构造函数执行的处理和 OnStart 执行的处理分开。可以由 OnStop 释放的任何资源都应在 OnStart 中创建。如果服务在 OnStop 释放资源后再次启动,那么,在构造函数中创建资源会妨碍这些资源的正确创建。 “服务控制管理器”(SCM) 提供与服务交互的方式。可以使用 SCM 将“开始”(Start)、“停止”(Stop)、“暂停”(Pause)、“继续”(Continue) 或自定义命令传递到服务中。SCM 使用 CanStop 和 CanPauseAndContinue 的值,决定服务是否接受“停止”、“暂停”或“继续”命令。仅当服务类中相应的属性 CanStop 或 CanPauseAndContinue 为 true 时,才会在 SCM 的上下文菜单中启用“停止”、“暂停”或“继续”。如果已启用,则相应的命令将传递到服务,并且调用 OnStop、OnPause 或 OnContinue。如果 CanStop、CanShutdown 或 CanPauseAndContinue 为 false,则即使已实现相应的命令处理方法(如 OnStop),也不会予以处理。 可以使用 ServiceController 类通过编程实现 SCM 使用用户界面实现的功能。可以自动处理控制台中可用的任务。如果 CanStop、CanShutdown 或 CanPauseAndContinue 为 true,但尚未实现相应的命令处理方法(如 OnStop),则系统引发异常并忽略该命令。 不必在 ServiceBase 中实现 OnStart、OnStop 或其他任何方法。然而,服务的行为在 OnStart 中加以描述,因此至少应重写该成员。必须在可执行文件的 main() 函数中设置服务的服务名称。在 main() 中设置的服务名称必须与服务安装程序的 ServiceName 属性完全匹配。 可以使用 InstallUtil.exe 在系统中安装服务。 可以参考文献:http://msdn.microsoft.com/zh-cn/library/system.serviceprocess.servicebase(VS.80).aspx Visual Studio 2012的Windows Service服务安装方式 标签:style blog http io color os ar 使用 sp 原文地址:http://www.cnblogs.com/hornet/p/4059437.html后台代码
public partial class Service1 : ServiceBase
{
public Service1()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
// TODO: 在此处添加代码以启动服务。
}
protected override void OnStop()
{
// TODO: 在此处添加代码以执行停止服务所需的关闭操作。
}
private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
}
}
public partial class Service1 : ServiceBase
{
public Service1()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
// TODO: 在此处添加代码以启动服务。
string state = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") + "启动";
WriteLog(state);
}
protected override void OnStop()
{
// TODO: 在此处添加代码以执行停止服务所需的关闭操作。
string state = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") + "停止";
WriteLog(state);
}
private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
WriteLog(DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss"));
}
public void WriteLog(string str)
{
using (StreamWriter sw = File.AppendText(@"c:\service.txt"))
{
sw.WriteLine(str);
sw.Flush();
}
}
}
上一篇:python初学小记
下一篇:第十五章、线程池和进程池
文章标题:Visual Studio 2012的Windows Service服务安装方式
文章链接:http://soscw.com/essay/33823.html