sc.exe create MyTestService binpath= C:\app\MyTestService\SimpleServiceHostingApp.exe type= own obj= kousa\MyTestService password= (MyTestServiceアカウントのパスワード) start= auto
PowerShellの場合と異なりアクセス権は設定されないため、サービスアカウントにアプリケーションの実行アクセス権を付与します。
Install-Package Microsoft.Extensions.Hosting.WindowsServices -Version 6.0.0
using Microsoft.Extensions.Hosting.WindowsServices;
var webApplicationOptions = new WebApplicationOptions {
ContentRootPath = WindowsServiceHelpers.IsWindowsService() ? AppContext.BaseDirectory : default,
Args = args,
};
var builder = WebApplication.CreateBuilder(webApplicationOptions);
builder.Host.UseWindowsService();
var app = builder.Build();
app.MapGet("/", () => "Hello ASP.NET Core World!");
app.Run();
MyTestService
アカウントを作成しました。マシン名はkousa
としていますので、
マシン名まで含めたアカウント名は kouksa\MyTestService
アカウントとなります。C:\app\MyTestService\
に配置しています。$acl = Get-Acl "C:\app\MyTestService"
$aclRuleArgs = "kousa\MyTestService", "Read,Write,ReadAndExecute", "ContainerInherit,ObjectInherit", "None", "Allow"
$accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule($aclRuleArgs)
$acl.SetAccessRule($accessRule)
$acl | Set-Acl "C:\app\MyTestService\SimpleServiceHostingApp.exe"
New-Service -Name MyTestService -BinaryPathName "C:\app\MyTestService\SimpleServiceHostingApp.exe" -Credential "kousa\MyTestService" -Description "MyTestServiceのサービス" -DisplayName "MyTestService" -StartupType Automatic
sc.exe create MyTestService binpath= C:\app\MyTestService\SimpleServiceHostingApp.exe type= own obj= kousa\MyTestService password= (MyTestServiceアカウントのパスワード) start= auto
Start-Service -Name MyTestService
http://localhost:5000
にアクセスします。
サービスが実行できていれば、下図のページが表示されます。ASP.NET Coreアプリケーションが実行でき、実装したレスポンスが返ることが確認できます。sc.exe delete "MyTestService"
Remove-Service -Name "MyTestService"