目录
- Topshelf
- 安装Topshelf包
- 代码如下,简单粗暴
- 卸载服务
- 安装服务
Topshelf
讨厌创建.net 服务时的窗体怎么办?讨厌调试.net服务怎么办?调试.net服务还要自己建控制台怎么办?
Topshelf 它来了!!!
Topshelf 是一个开源的跨平台的宿主服务框架,支持Windows和Mono,只需要几行代码就可以构建一个很方便使用的服务宿主。
使用Topshelf可以非常方便的将一个C#控制台程序部署成为一个Windows Service,使用它可以很方便的构建跨平台服务寄主,而在调试时直接以控制台的形式运行即可,非常方便。
TopShelf 安装不需要依赖 .net framework 框架中的 InstallUtil.exe 工具
安装Topshelf包
代码如下,简单粗暴
记得自己创建log文件夹
namespace TopShelfService
{public class Program{public static void Main(string[] args){HostFactory.Run(x =>{if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX) || RuntimeInformation.IsOSPlatform(OSPlatform.Linux)){x.UseEnvironmentBuilder(target => new DotNetCoreEnvironmentBuilder(target));}else{x.UseEnvironmentBuilder(target => new WindowsHostEnvironmentBuilder(target));}x.UseAssemblyInfoForServiceInfo();x.Service<WriteTxtClass>(w =>{w.ConstructUsing(name => new WriteTxtClass()); //使用 WriteTxtClass实体w.WhenStarted(tc => tc.WriteTxtStart()); //开始服务触发 WriteTxtStart 函数w.WhenStopped(tc => tc.WriteTxtStop()); //结束服务触发 WriteTxtStop 函数});x.SetServiceName("TopShelfService1"); //服务名x.SetDisplayName("TopShelfService1");//服务显示名称x.SetInstanceName("TopShelfService1"); //服务显示名称后面的描叙x.SetDescription("TopShelfService1 is Test Services"); // 服务描叙x.RunAsLocalSystem();x.StartAutomatically();});//Console.WriteLine("Hello World!");}public class WriteTxtClass{public void WriteTxtStart(){try{string filePath = AppDomain.CurrentDomain.BaseDirectory + "log\\test.txt";if (!File.Exists(filePath)){FileStream stream = new FileStream(filePath, FileMode.Create);StreamWriter writer = new StreamWriter(stream, Encoding.Default);writer.WriteLine(DateTime.Now.ToString() + ":Start Service");//写入一行,写完后会自动换行writer.Close();//释放内存stream.Close();//释放内存}else{FileStream stream = new FileStream(filePath, FileMode.Append);//再原有文件中追加记录,不覆盖StreamWriter writer = new StreamWriter(stream, Encoding.Default);writer.WriteLine(DateTime.Now.ToString() + ":Start Service");//写入一行,写完后会自动换行writer.Close();//释放内存stream.Close();//释放内存}}catch (Exception ex){throw;}}public void WriteTxtStop(){try{string filePath = AppDomain.CurrentDomain.BaseDirectory + "log\\test.txt";if (!File.Exists(filePath)){FileStream stream = new FileStream(filePath, FileMode.Create);StreamWriter writer = new StreamWriter(stream, Encoding.Default);writer.WriteLine(DateTime.Now.ToString() + ":Stop Service");//写入一行,写完后会自动换行writer.Close();//释放内存stream.Close();//释放内存}else{FileStream stream = new FileStream(filePath, FileMode.Append);//再原有文件中追加记录,不覆盖StreamWriter writer = new StreamWriter(stream, Encoding.Default);writer.WriteLine(DateTime.Now.ToString() + ":Stop Service");//写入一行,写完后会自动换行writer.Close();//释放内存stream.Close();//释放内存}}catch (Exception ex){throw;}}}}
}
卸载服务
用管理员启动控制台,在项目目录下运行以下代码
TopShelfService.exe uninstall
安装服务
用管理员启动控制台,在项目目录下运行以下代码
TopShelfService.exe install