開發windows服務,除了在vs里新建服務項目外(之前有寫過具體開發方法,可點擊查看),還可以使用Topshelf。
不過使用topshelf需要.netframework 4.5.2版本,在vs2013上引用不成功,我這里使用的是vs2017。
以下為具體步驟:
一、引用topshelf 並使用
1、在vs里新建控制台程序

2、在引用里使用NuGet搜索topshelf並安裝


3、程序代碼
using log4net; using System; using System.IO; using System.Reflection; using System.Timers; using Topshelf; namespace TopshelfTest { public class TestWriteLog { readonly Timer _timer; ILog _log = LogManager.GetLogger(typeof(TestWriteLog)); public TestWriteLog() { _timer = new Timer(1000) { AutoReset = true, Enabled = true }; int i = 0; _timer.Elapsed += delegate (object sender, System.Timers.ElapsedEventArgs e) { i++; _log.Info("測試" + i.ToString()); }; } public void Start() { _log.Info("Service is Started"); _timer.Start(); } public void Stop() { _log.Info("Service is Stopped"); _timer.Stop(); } /// <summary> /// 應用程序的主入口點。 /// </summary> static void Main() { HostFactory.Run(c => { c.Service<TestWriteLog>((x) => { x.ConstructUsing(name => new TestWriteLog()); x.WhenStarted((t) => t.Start()); x.WhenStopped((t) => t.Stop()); }); c.RunAsLocalSystem(); //服務描述 c.SetDescription("TestServices測試服務描述"); //服務顯示名稱 c.SetDisplayName("TestServices測試服務顯示名稱"); //服務的真實名稱 c.SetServiceName("TestServices"); }); } } }
4、log4net引用和配置方法
4.1 使用以上方法引用log4net.dll
4.2 在app.config 里作如下配置
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<log4net>
<!-- OFF, FATAL, ERROR, WARN, INFO, DEBUG, ALL -->
<!-- Set root logger level to ERROR and its appenders -->
<root>
<level value="ALL" />
<appender-ref ref="SysAppender" />
</root>
<!-- Print only messages of level DEBUG or above in the packages -->
<logger name="WebLogger">
<level value="log" />
</logger>
<appender name="SysAppender" type="log4net.Appender.RollingFileAppender,log4net">
<!--<param name="File" value="App_Data/" />-->
<File value="Logs\log" />
<!--日志文件位置和文件名-->
<param name="AppendToFile" value="true" />
<param name="RollingStyle" value="Date" />
<!--<param name="DatePattern" value=""Logs_"yyyyMMdd".txt"" />-->
<param name="DatePattern" value="yyyyMMdd".txt"" />
<!--在文件名后面加內容 比如 log名變為log20180808-->
<param name="StaticLogFileName" value="false" />
<layout type="log4net.Layout.PatternLayout,log4net">
<param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
</layout>
</appender>
<appender name="consoleApp" type="log4net.Appender.ConsoleAppender,log4net">
<layout type="log4net.Layout.PatternLayout,log4net">
<param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
</layout>
</appender>
</log4net>
4.3 在properties的AssemblyInfo.cs里 加如下配置

[assembly: log4net.Config.XmlConfigurator(ConfigFileExtension = "config", Watch = true)]
5、生成項目
生成項目后可以將bin\debug里的內容拷出來單獨放服務的位置,
6、安裝、卸載服務
使用管理員運行cmd,cd到你的服務文件位置,我這里直接在debug里安裝服務的。
服務.exe install -----安裝服務

在服務里就可以看到安裝的服務了

服務.exe uninstall -----卸載服務

7、運行結果
在安裝服務后開啟服務

