ディレクトリ
サービスモードで実行されているネットコアベース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時よりも多くのまたはオープンソースプロジェクトを知っていれば、私は、私たちを促すありがとう。