サービスモードで実行されているネットコアベースTopShelf

サービスモードで実行されているネットコアベースTopShelf

1つの背景

ネットコアは、ウィンドウプロシージャの本質である(ウィンドウ内の式には、コンソールウィンドウです)。同社のフィードバックの顧客およびプロダクトマネージャー誤ってウィンドウを閉じている場合は、プログラム全体がシャットダウンされ、結果は非常に深刻な可能性があり、そのソフトウェアはTopShelfサービスモデルによってなされる、CMDコマンドでインストール、起動、停止、アンインストールプログラム。

2つのメリット

2.1サービスモードは、条件を再起動するように設定することができます

そのような1G以上のメモリ、再起動の設定など。

2.2誤用を避けます

ウィンドウモード誤ってシャットダウンを避けてください。

3.

3.1 GUIパッケージがインストールさTopshelf

4設定

Program.csのファイルには、コメントを表示します

            var rc = HostFactory.Run(x =>                        
            {
                /*运行MainService主程序*/
                //创建一个MainService服务实例
                x.Service<MainService>(s =>                      
                {
                    //通知TopShelf 这里有一个MainService类型的服务,通过s来配置他的参数
                    s.ConstructUsing(name => new MainService(Directory.GetCurrentDirectory())); 
                    //TopShelf启动服务         
                    s.WhenStarted(tc => tc.Start());  
                    //TopShelf停止服务           
                    s.WhenStopped(tc => tc.Stop());              
                });
                //x.RunAs("username", "password");也可以用户名密码方式运行
                x.RunAsLocalSystem();
                //服务描述
                x.SetDescription("WEBAPIService");     
               //服务显示名称  
                x.SetDisplayName("WEBAPIService");      
                //服务名称          
                x.SetServiceName("WEBAPIService");               
            });             
            //转化退出编码                                     
            var exitCode = (int)Convert.ChangeType(rc, rc.GetTypeCode());  
            //设置退出编码
            Environment.ExitCode = exitCode;

5メインプログラムが実行されます

MainService.csはファイル、コメントを参照してください。

namespace IBMS.WEBAPI
{
    public class MainService
    {    //创建一个webhost实例
          private IWebHost _webHost;
          private readonly string _contentRoot;
        
          public MainService(string contentRoot)
          {
              _contentRoot = contentRoot;
          }
         //服务模式启动程序
          public void Start()
          {
            // 获取链接字符串
            var config = new ConfigurationBuilder()
                  .SetBasePath(Directory.GetCurrentDirectory())
                  .AddJsonFile("appsettings.json")
                  .Build();
           //配置webhost
            _webHost = new WebHostBuilder()
                  .UseKestrel()
                  .UseContentRoot(_contentRoot)
                  .UseUrls(config["urls"])
                  .UseStartup<Startup>()
                  .UseSerilog()
                  .Build();
            var _logger = _webHost.Services.GetService<ILoggerFactory>().CreateLogger<MainService>();
            _logger.Log(LogLevel.Information, new EventId(1001, "Starting"), "Service Starting");
            //种子数据种入数据库
            using (var scope = _webHost.Services.CreateScope())
            {
                try
                {
                    var context = scope.ServiceProvider.GetService<IIBMSContext>();

                    var concreteContext = (IBMSContext)context;
                    concreteContext.Database.Migrate();
                    SeedData.Initialize(concreteContext);
                }
                catch (Exception ex)
                {
                //    var _logger = scope.ServiceProvider.GetRequiredService<ILogger<MainService>>();
                    _logger.LogError(ex, "An error occurred while migrating or initializing the database.");
                }
            }
            //启动webhost
            _webHost.Start();
          }
        
          public void Stop()
          {
              _webHost?.Dispose();
          }
    }
}

6インストール手順を開始します

IBMS.WEBAPI.exeはインストール
IBMS.WEBAPI.exeスタート

7つの停止アンインストール手順

IBMS.WEBAPI.exeアンインストール
IBMS.WEBAPI.exe停止

8つのサービスが実行されている概略図

検討について9

あなたが知っているか、問題の解決やオープンソースプロジェクトがある聞いたことがある場合は、この感謝の進展の下で、私も共通させ、ご連絡ください。

9.1インストールにする方法(サービス3-4)

たとえば、Windows MSIインストーラツールの。

9.2設定ツールには窓がありません

例えば、コンフィギュレーションツールは、パラメータ設定ファイル(config.jsの、のmy.ini、appsettings.json、nginx.conf読み取ることができ 、redis.windows.conf ...)、 およびヒトのGUI管理ツールを介して設定することができユーザインタラクションデータは、コンフィギュレーションファイルに対応する独自の構成として配置されています。
例えば:

これはサービスの停止を開始するように設定し、ウォッチドッグ監視サービス、(インストール、アンインストール)ツールに似ているかどうか9.3

例えば:


あなたはこの問題に対する解決策3時よりも多くのまたはオープンソースプロジェクトを知っていれば、私は、私たちを促すありがとう。

おすすめ

転載: www.cnblogs.com/JerryMouseLi/p/11537372.html