天天看点

.net 中用TopShelf 实现windows服务

1、TopShelf 是一个开源的跨平台的宿主服务框架,支持Windows和Mono,只需要几行代码就可以构建一个很方便使用的服务宿主。TopShelf 安装不需要依赖 .net framework 框架中的 InstallUtil.exe  工具。下面举例说明:

  static void Main(string[] args)

        {

            HostFactory.Run(x =>

            {

                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();

            });

        }

    public class WriteTxtClass

    {

        public void WriteTxtStart()

        {

            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();//释放内存

            }

        }

        public void WriteTxtStop()

        {

            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();//释放内存

            }

        }

    }

.net 中用TopShelf 实现windows服务
.net 中用TopShelf 实现windows服务

2、 安装和卸载windows服务

                 TopShelfService.exe install        #安装Windows服务

     TopShelfService.exe uninstall     #卸载Windows服务

     先找到文件所在目录命令, 安装图如下:

.net 中用TopShelf 实现windows服务

卸载:

.net 中用TopShelf 实现windows服务
.net 中用TopShelf 实现windows服务