输入项目名称,选择框架直接生成项目
点击添加
选择属性后更换
将USER 改为 LOCALSYSTEM
可以自己更改serviceInstaller1 和servicename
SeriviceName:就是你等下装到系统里面的服务名称
在更改的页面右击查看代码或者F7
继承serviceBase,重写onstart(),onstop()方法
这两个方法记录服务启动和停止,在这两个方法里面增加写日志的方法,当服务启动停止可以直接查看日志
两种写入的方法,都很扣脚
using System; using System.ComponentModel; using System.Diagnostics; using System.IO; using System.ServiceProcess; using System.Timers; namespace WindowsServiceCode { [RunInstaller(true)] public partial class ProjectInstaller : ServiceBase { //记录到event log中,地址是 C:\Windows\System32\winevt\Logs (双击查看即可,文件名为MyNewLog) private static EventLog eventLog1; //记录执行的次数 private int eventId = 1; public ProjectInstaller() { InitializeComponent(); eventLog1 = new System.Diagnostics.EventLog(); if (!System.Diagnostics.EventLog.SourceExists("MySource")) { System.Diagnostics.EventLog.CreateEventSource( "MySource", "MyNewLog"); } eventLog1.Source = "MySource"; eventLog1.Log = "MyNewLog"; } private void TimedEvent(object sender, ElapsedEventArgs e) { //定时器定时执行的方法 using (System.IO.StreamWriter sw = new System.IO.StreamWriter("C:\\log.txt", true)) { sw.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss ") + "RunTime.+执行方法" + "\n"); } eventLog1.WriteEntry("Monitoring the System", EventLogEntryType.Information, eventId++); log("RunTime.+执行方法"); } /// <summary> /// 开始服务 /// </summary> /// <param name="args"></param> protected override void OnStart(string[] args) { FileStream fs = new FileStream(@"C:\log.txt", FileMode.OpenOrCreate, FileAccess.Write); StreamWriter m_streamWriter = new StreamWriter(fs); m_streamWriter.BaseStream.Seek(0, SeekOrigin.End); m_streamWriter.WriteLine(DateTime.Now.ToString() + "OnStartMethod1-1" + "\n"); m_streamWriter.Flush(); m_streamWriter.Close(); fs.Close(); using (System.IO.StreamWriter sw = new System.IO.StreamWriter("C:\\log.txt", true)) { sw.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss ") + "OnStartMethod1-2" + "\n"); } #region 又来记录日志的方法 eventLog1.WriteEntry("OnStartMethod1-3"); log("OnStartMethod1-4"); #endregion 又来记录日志的方法 #region 定时器定义 Timer aTimer = new Timer();//System.Timers,不是form的 aTimer.Elapsed += new ElapsedEventHandler(TimedEvent); aTimer.Interval = 2 * 1000; //配置文件中配置的秒数 2 seconds 执行一次 aTimer.Enabled = true; aTimer.Start(); #endregion 定时器定义 } /// <summary> /// 停止服务 /// </summary> protected override void OnStop() { FileStream fs = new FileStream(@"C:\log.txt", FileMode.OpenOrCreate, FileAccess.Write); StreamWriter m_streamWriter = new StreamWriter(fs); m_streamWriter.BaseStream.Seek(0, SeekOrigin.End); m_streamWriter.WriteLine(DateTime.Now.ToString() + "OnStopMethod2-1" + "\n"); m_streamWriter.Flush(); m_streamWriter.Close(); fs.Close(); using (System.IO.StreamWriter sw = new System.IO.StreamWriter("C:\\log.txt", true)) { sw.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss ") + "OnStopMethod2-2" + "\n"); } eventLog1.WriteEntry("OnStopMethod2-3"); log("OnStopMethod2-4"); } /// <summary> /// 继续服务 /// </summary> protected override void OnContinue() { eventLog1.WriteEntry("In OnContinue.-继续服务"); log("In OnContinue.-继续服务"); } /// <summary> /// 记录到指定路径:D:\log.txt /// </summary> /// <param name="message"></param> private static void log(string message) { using (FileStream stream = new FileStream("D:\\log.txt", FileMode.Append)) using (StreamWriter writer = new StreamWriter(stream)) { writer.WriteLine($"{DateTime.Now}:{message}"); } } } }
复制C:\Windows\Microsoft.NET\Framework\v4.0.30319 下的InstallUtil.exe到生成的文件夹下
CMD先进入刚刚所在的文件夹
CMD管理员身份运行刚刚VS 生成的目录
剩下的今天来不及了,以后再记录吧
转载参考连接:http://www.vnfan.com/robin/d/9c9cdea813e068d9.html
原文:https://www.cnblogs.com/fei-tang/p/13960627.html