天天看點

.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服務

繼續閱讀