C# Windows服务的创建、安装、调试
一、查看已有的Windows服务
选择菜单“开始”-〉“控制面板”-〉“管理工具”-〉“服务”来查看现有系统中的服务

二、C#中创建 Windows 服务
1、Visual Studio=> 新建 => 项目 => Windows 服务

2、重命名Service1.cs文件名为容易识别功能的文件名,这里我重命名成 MyFirstWinService.cs,如果类名改了,需要在 Program.cs文件的 Main() 方法里面的 new 对象也相应改过来

3、在此文件的设计视图中右键,在弹出的菜单中选择添加安装程序

4、项目会自动生成安装文件 ProjectInstaller.cs ,并且分别设置 serviceIntaller1 与 serviceProcessInstaller1 的属性。



5、到这里,服务的安装程序与框架已经搭建完毕
三、Windows服务的安装
1、新建安装服务的批处理文件
Install.bat

%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe WindowsServiceTest.exe
Net Start ServiceTest
2、新建卸载服务的批处理文件
Uninstall.bat

net stop ServiceTest
%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe /u WindowsServiceTest.exe
3、将批处理文件放入项目的bin->Debug文件夹下面,这样就可以方便使用程序控制服务的安装和卸载。

4、双击运行 Install.bat 进行自动安装 Windows 服务
5、安装成功后,可以进入Windows 服务 管理器,对刚才安装的服务设置启动方式:

新安装的服务一般是不会启动的,需要我们 点击上图中的启动按钮进行启动
四、Windows 服务开发过程中的调试
通过附加进程的方式调试Windows 服务,此方法必须先把写好的服务进行编译生成可执行的exe安装程序,并安装启动服务后,才可以进行附加此服务进程。
1、首先要对服务进行安装,然后启动服务。
2、打开VS项目,选择菜单 调试->附加到进程 选项,选择你的服务进程(如果找不到可以勾选 显示所有用户进程 选项)就可以了。如下图:

windows 服务实例:
每隔设置时间执行某段代码
internal static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
private static void Main()
{
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
{
new OrderUpdateService()
};
ServiceBase.Run(ServicesToRun);
}
}
重点code:
using System;
using System.Configuration;
using System.ServiceProcess;
using System.Threading;
using CRM.Services.Service;
using Castle.Windsor;
using Crm.DataSync.Installer;
using log4net;
public partial class OrderUpdateService : ServiceBase
{
private static readonly ILog Log = LogManager.GetLogger(typeof(OrderUpdateService));
private static Timer _timer;
private static bool _timerRunning;
private static Timer _signTimer;
private static bool _signTimerRunning;
static readonly OrderUpdateNew Service = new OrderUpdateNew();
public OrderUpdateService()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
try
{
Log.Info("service started");
var container = new WindsorContainer();
container.Install(new GlobalInstaller());
var intervalStr = ConfigurationManager.AppSettings["Interval"];
int interval = 60;
int t;
if (int.TryParse(intervalStr, out t))
{
interval = t;
}
var period = interval * 60000;
_timer = new Timer(timer_Elapsed);
_timer.Change(2000, period);
int mandatoryInterval = 5;
intervalStr = ConfigurationManager.AppSettings["MandatoryInterval"];
if (int.TryParse(intervalStr, out t))
{
mandatoryInterval = t;
}
period = mandatoryInterval * 60000;
_signTimer = new Timer(MandatorySignHandler);
_signTimer.Change(2000, period);
}
catch (Exception ex)
{
Log.Error("", ex);
}
}
protected override void OnStop()
{
try
{
Log.Info("service stopped");
}
catch (Exception ex)
{
Log.Error("", ex);
}
}
void timer_Elapsed(object sender)
{
try
{
if (_timerRunning) return;
_timerRunning = true;
var service = Service;
if (service != null && PassRules())
{
service.UpdateData();
}
_timerRunning = false;
}
catch (Exception ex)
{
Log.Error("timer exception", ex);
}
}
void MandatorySignHandler(object sender)
{
const string title = "客户确认签收订单处理";
Log.Info(title + "begin");
try
{
var service = Service;
if (service != null)
{
service.UpdateMandatorySignedOrder();
}
}
catch (Exception ex)
{
Log.Error(title, ex);
}
Log.Info(title + "end");
}
bool PassRules()
{
var now = DateTime.Now;
int hour = now.Hour;
if (hour >= 0 && hour <= 5
|| (hour >= 22 && hour <= 24)) return false;
return true;
}
}
C# Windows服务的创建、安装、调试的更多相关文章
- windows service 的创建 安装 调试 错误回发
关于如何快速创建一个windows服务 1.在vs中创建windows服务 名称:你要写的服务名称 位置:创建服务所在的位置 点击确定 2.代码编写 3.添加安装程序 点击添加安装程序出现 分别右击设 ...
- C# windows服务的创建与调试
Windows Service这一块并不复杂,但是注意事项太多了,网上资料也很凌乱,偶尔自己写也会丢三落四的.所以本文也就产生了,本文不会写复杂的东西,完全以基础应用的需求来写,所以不会对Window ...
- 【转】C# windows服务的创建与调试
Windows Service这一块并不复杂,但是注意事项太多了,网上资料也很凌乱,偶尔自己写也会丢三落四的.所以本文也就产生了,本文不会写复杂的东西,完全以基础应用的需求来写,所以不会对Window ...
- windows服务的创建、安装、调试全过程及引发的后续学习
前几天做项目的时候需要用到window服务,研究一段时间,算是掌握了最基本的使用方法吧,现总结如下: 引言:在项目过程中碰到一个问题:需要不断的扫描一个大型数据库表,并获取dataset,以便做后续的 ...
- C# Windows Service服务的创建和调试
前言 关于Windows服务创建和调试的文章在网络上的很多文章里面都有,直接拿过来贴在这里也不过仅仅是个记录,不会让人加深印象.所以本着能够更深刻了解服务项目的创建和调试过程及方法的目的,有了这篇记录 ...
- 关于windows服务的编写/安装/与调试
前注: 首先,这篇文章是从网上转过来的,因为最近有个项目,需要编写一个Windows Service来定时执行程序,网上很容易找到了这篇文章,大概看了一下,文章讲的还是很详细的.不过这篇文章应该是.n ...
- 玩转Windows服务系列——创建Windows服务
创建Windows服务的项目 新建项目->C++语言->ATL->ATL项目->服务(EXE) 这样就创建了一个Windows服务项目. 生成的解决方案包含两个项目:Servi ...
- 玩转Windows服务系列——创建Windows服务
原文:玩转Windows服务系列——创建Windows服务 创建Windows服务的项目 新建项目->C++语言->ATL->ATL项目->服务(EXE) 这样就创建了一个Wi ...
- windows服务的创建、安装和调试
1.创建 windows服务 项目 文件 -> 新建项目 -> 已安装的模板 -> Visual C# -> windows ,在右侧窗口选择"windows 服 ...
随机推荐
- 80x86汇编小站站长简单介绍-2014年08月23日
[序言] 旧版的"80x86汇编小站站长简单介绍"已经过时了, 因此于2013年10月01日花费1个小时又一次更新和排版一次. [人生格言] 1] 一生都用头脑而不是情绪解决这个 ...
- mysql回想一下基础知识
创建数据库 creat table test( #整数通常用于int test_id int, #十进制通常使用decimal test_price decimal, #普通文本通常使用.并使用Def ...
- effective c++ 条款6 如果不想要就要告诉大家
这个条款应该和第五个放在一起 编译器默认生成 1 无参构造函数, 2 析构函数 3 拷贝构造函数 4 赋值预算符 当我们不需要,就要显示的告诉大家我们不需要. 方法:自己声明这个函数为private, ...
- 北邮iptv用WindowsMediaplayer打不开的解决的方法
前言:之前我的iptv能够用,可是有次我安装了realplayer,它就偷偷把iptv文件的默认打开方式给篡改了,卸载了 realplayer之后,iptv不能直接用 ...
- $.ajax通路RESTful Web Service一个错误:Unsupported Media Type
最近项目,使用头版jquery ajax访问背景CXF发布时间rest维修,结果遇到了错误"Unsupported Media Type". 公布的服务java代码例如以下: im ...
- eclipse报错:发现了以元素 'd:skin' 开头的无效内容。此处不应含有子元素
Console报错: sdk\system-images\android-22\android-wear\armeabi-v7a\devices.xml cvc-complex-type.2.4.d: ...
- UML学习(一)类图和对象图
对象是一个概念,一种抽象或者事物.对象能够是具有现实意义的事物,也能够是抽象的一个概念.比方,一家公司或者一个进程. 类是一组对象的集合或者抽象的概念.类具有同样的属性和方法. 介绍完基本对象和类的基 ...
- HDU 2017 一系列统计数据
一系列统计数据 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Su ...
- iOS_17_控制开关_TabBarController_由storyboard道路
最后效果图: main.storyboard BeyondViewController.m中有一句关键代码,设置tabbarItem图片的样式(30*30) // // BeyondViewContr ...
- PHP PDO sqlite ,Unable to Open database file的解决方法
t.php在网站的根目录. fdy.db在inc文件夹下; t.php中sqlite路径写成相对路径 $db = new PDO('sqlite:inc/fdy.db'); 开始提示 Fatal er ...