window service 开发
为了便于window service的调试和开发。
我整理了一下代码,方便大家查阅
App.config
设置启动时间
timerStart-10点
interval-3600000 1小时检查一次
isdebug-调试模式
<!--timer-->
<add key="timerStart" value="10" />
<add key="interval" value="3600000" />
<!--IsDebug-->
<add key="IsDebug" value="true" />
<!--Log-->
<add key="logPath" value="D:\Log\" />
Program
static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
static void Main()
{
if (MyConfig.IsDebug)
{
//测试
Service1 s = new Service1();
}
else
{
//正式
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
{
new Service1()
};
ServiceBase.Run(ServicesToRun);
}
}
}
Service
public Service1()
{
InitializeComponent();
//全局异常
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
//运行
RunService();
}
System.Timers.Timer timer1 = new System.Timers.Timer(MyConfig.interval);
protected override void OnStart(string[] args)
{
//正式
if (!MyConfig.IsDebug)
{
timer1.AutoReset = true;
timer1.Elapsed += new System.Timers.ElapsedEventHandler(timer1_Elapsed);
timer1.Enabled = true;
}
}
private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
if (DateTime.Now.Hour == MyConfig.timerStart)
{
RunService();
}
}
public void RunService()
{
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
LogHelper.WriteLog(" <<==开始______________________" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "______________________==>>");
try
{
//处理逻辑
DoSomeThing();
LogHelper.WriteLog(" <<==结束______________________" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "______________________==>>");
}
catch (Exception ex)
{
LogHelper.WriteLog(ex.Message);
LogHelper.WriteLog(ex.StackTrace);
LogHelper.WriteLog(" <<==结束______________________" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "______________________==>>");
}
finally
{
Clear();
}
}
protected override void OnStop()
{
//正式
timer1.Enabled = false;
}
void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
try
{
Exception ex = e.ExceptionObject as Exception;
string exStr = "\n" + "\n" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + ex.Message + "详细信息如下:\n"
+ Environment.NewLine + "[InnerException]" + ex.InnerException + "\n"
+ Environment.NewLine + "[Source]" + ex.Source + "\n"
+ Environment.NewLine + "[TargetSite]" + ex.TargetSite + "\n"
+ Environment.NewLine + "[StackTrace]" + ex.StackTrace + "\n";
LogHelper.WriteLog(exStr);
}
catch { }
finally { }
}
LogHelper
public class LogHelper
{
public static readonly string logPath = ConfigurationManager.AppSettings["logPath"];
private static readonly object writeFile = new object();
public LogHelper() { }
/// <summary>
/// 在本地写入错误日志
/// </summary>
/// <param name="exception"></param>
public static void WriteLog(string debugstr)
{
lock (writeFile)
{
FileStream fs = null;
StreamWriter sw = null;
try
{
string filename = DateTime.Now.ToString("yyyy-MM-dd") + ".txt";
//服务器中日志目录
if (!Directory.Exists(logPath))
Directory.CreateDirectory(logPath);
fs = new FileStream(logPath + "/" + filename, System.IO.FileMode.Append, System.IO.FileAccess.Write);
sw = new StreamWriter(fs, Encoding.UTF8);
sw.WriteLine(DateTime.Now.ToString() + " " + debugstr + "\r\n");
}
finally
{
if (sw != null)
{
sw.Flush();
sw.Dispose();
sw = null;
}
if (fs != null)
{
// fs.Flush();
fs.Dispose();
fs = null;
}
}
}
}
}
window service 开发的更多相关文章
- 【转】android 最新 NDK r8 在window下开发环境搭建 安装配置与使用 详细图文讲解,完整实际配置过程记录(原创)
原文网址:http://www.cnblogs.com/zdz8207/archive/2012/11/27/android-ndk-install.html android 最新 NDK r8 在w ...
- C# window Service实现调用有UI的应用程序(关于win xp以后的window系统)
我开发的系统中有一接口程序(这里就称Task,是一个C#的Console Application)经常无故的死掉,导致第二天的数据不能正常解析,所以,我写了一个window service去监视Tas ...
- android 最新 NDK r8 在window下开发环境搭建 安装配置与使用 详细图文讲解,完整实际配置过程记录(原创)
android 最新 NDK r8 在window下开发环境搭建 安装配置与使用 详细图文讲解,完整实际配置过程记录(原创) 一直想搞NDK开发却一直给其他事情耽搁了,参考了些网上的资料今天终于把 ...
- window service 创建
1:vs中创建一个 window servece 2.右键 添加安装程序 3.更改属性视图中的Account属性为LocalService(本地服务) 更改ServiceName为你自己的服务名称 ...
- Android NDK r8 Cygwin CDT 在window下开发环境搭建 安装配置与使用 具体图文解说
版权声明:本博客全部文章均为原创.欢迎交流.欢迎转载:转载请勿篡改内容,而且注明出处,谢谢! https://blog.csdn.net/waldmer/article/details/3272500 ...
- Windows Service 开发,安装与调试
Visual Studio.net 2010 Windows Service 开发,安装与调试 本示例完成一个每隔一分钟向C:\log.txt文件写入一条记录为例,讲述一个Windows Servic ...
- JAX-RS 方式的 RESTful Web Service 开发
JAX-RS 方式的 RESTful Web Service 开发 ——基于 CXF+Spring 的实现 Web Service 目前在风格上有两大类,一个是基于 SOAP 协议,一个是完全遵循 H ...
- C# window service的创建
其实我也是第一次在博客园写博客,看到那些高手说自己要多动手写博客,于是乎自己也尝试尝试. 废话不多说.这几天在研究window service,通过查找各种大神写的博客,我终于成功的自己写出来了. 下 ...
- 创建 window service 定时任务
参考文章:http://www.cnblogs.com/jack-liang/archive/2011/05/20/2051743.html 前段时间做过一个项目,前端系统提供添加定时任务,后端系统要 ...
随机推荐
- three.js - 动画 图形统计帧频 dat.GUI
运行一把: 代码解释: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...
- Webpack 概念
概念 webpack 是一个现代的 JavaScript 应用程序的模块打包器(module bundler).当 webpack 处理应用程序时,它会递归地构建一个依赖关系图表(dependency ...
- ASP.NET MVC中jQuery与angularjs混合应用传参并绑定数据
要求是这样子的,在一个列表页中,用户点击详细铵钮,带记录的主键值至另一页.在另一外页中,获取记录数据,然后显示此记录数据在网页上. 先用动图演示: 昨天有分享为ng-click传递参数 <ang ...
- [python]python 遍历一个list 的小例子:
[python]python 遍历一个list 的小例子: mlist=["aaa","bbb","ccc"]for ss in enume ...
- Ubuntu16.04程序自启动
试过修改/etc/rc.local文件,但是启动无效. 目前试过行之有效的方式如下: 参考:https://www.aliyun.com/jiaocheng/186625.html 在终端执行 gno ...
- [JSOI2016]无界单词[动态规划、kmp]
题意 题目链接 分析 对于第一问,枚举最终串最小的相同前后缀来统计答案. 由于最小的相同前后缀也是无界单词,所以可以考虑先求解子问题. 定义状态 \(f(i)\) 表示长度为 \(i\) 的串中有多少 ...
- JVM规范系列第1章:引言
如果你还没下载<Java虚拟机规范>这本书,那么先点击这里下载再一块儿看吧. 前言 Java 虚拟机是一个抽象化的机器,整个规范中提及的 Java 虚拟机都是抽象化的概念,而不是特指 Or ...
- Flutter - Json序列化
这个问题,FlutterChina小组已经说明的非常清楚易懂了. 详见https://flutterchina.club/json/
- ABAQUS粘弹性边界及地震荷载施加的简单实现(Matlab生成input文件)
思路 粘弹性边界因为能够考虑地基辐射阻尼而使得结构抗震的计算结果更趋于合理,所以在需要考虑结构地基相互作用的结构抗震计算时,是较为常用的地基边界处理和地震荷载施加方法.而ABAQUS软件是经常用来进行 ...
- Linux下IP SAN共享存储操作记录
一.简单介绍SAN,即存储区域网络(storage area network and SAN protocols),它是一种高速网络实现计算机与存储系统之间的数据传输.常见的分类是FC-SAN和IP- ...