sc.exe create MyTestService binpath= C:\app\MyTestService\SimpleServiceHostingApp.exe type= own obj= kousa\MyTestService password= (MyTestServiceアカウントのパスワード) start= auto
PowerShellの場合と異なりアクセス権は設定されないため、サービスアカウントにアプリケーションの実行アクセス権を付与します。
ASP.NET Core 6 アプリケーションを Windowsのサービスとして配置、実行する手順を紹介します。
こちらの記事では、ASP.NET Core 6アプリケーションをIISのWebサーバーに配置して実行する手順を紹介しました。
ASP.NET Core アプリケーションはIISに配置して実行する以外に、Windowsのサービスとして実行する方法もあります。
この記事では、ASP.NET Core 6 アプリケーションをWindowsのサービスとして配置する手順を紹介します。
サービスとして実行するASP.NET Coreのアプリケーションを作成します。
ASP.NET Coreの空アプリケーションを作成します。
Microsoft.Extensions.Hosting.WindowsServices をインストールします。
NuGetパッケージマネージャーで次のコマンドを実行します。
NuGetパッケージマネージャーでのインストール手順は
こちらの記事を
参照してください。
Install-Package Microsoft.Extensions.Hosting.WindowsServices -Version 6.0.0
Program.csファイルのコードを以下に変更します。
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();
サービスとしてASP.NET Core アプリケーションを稼働するマシンに、.NETランタイムをインストールします。
インストールするラインタイムはASP.NET Windows Hosting Bundleになります。
.NET 6の場合のインストール手順はこちらの記事を参照してください。
サービスアカウントの作成をします。アカウントの作成はこちらの記事を参照してください。
また、作成したアカウントをサービスアカウントとして設定する必要があります。
サービスアカウントに設定する手順はこちらの記事を参照してください。
今回の例では MyTestService
アカウントを作成しました。マシン名はkousa
としていますので、
マシン名まで含めたアカウント名は kouksa\MyTestService
アカウントとなります。
プロジェクトの発行でフォルダーに発行します。手順についてはこちらの記事を参照してください。
発行したファイルをインストール先のマシンに配置します。今回の例ではC:\app\MyTestService\
に配置しています。
サービスを作成するためのPowerShellスクリプトを用意します。
ps1ファイルを作成し下記のコードを記述します。
$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
コンピューターの管理を開き、サービス一覧画面を表示します。先ほど作成したサービス(MyTestService)が一覧に追加されていることを確認します。
サービスは停止していますので、サービスを起動します。MyTestServiceの項目をクリックして選択し、右クリックします。
下図のポップアップメニューが表示されますので、[開始]の項目をクリックします。
サービスが開始できると[状態]の欄が"実行中"の表示に変わります。
Start-Service -Name MyTestService
サービスとしてASP.NET Coreアプリケーションが起動しているか確認します。Webブラウザを開き http://localhost:5000
にアクセスします。
サービスが実行できていれば、下図のページが表示されます。ASP.NET Coreアプリケーションが実行でき、実装したレスポンスが返ることが確認できます。
ローカルマシンから動作の確認ができましたが、外部のマシンからの接続はまだできない状態です。
外部からアクセスできるようにするための設定をします。
手順の詳細はこちらの記事を参照してください。
オプションを間違えてサービスを作成してしまった場合、いったんサービスを削除した後に、再度サービスを作成する必要があります。
サービスを削除するスクリプトファイルを準備しておきます。
ps1ファイルを作成し、下記のコードを記述します。
Remove-Serviceコマンドレットがない場合は、sc.exeを実行してサービスを削除します。sc.exeでサービスを削除するスクリプトは以下です。
sc.exe delete "MyTestService"
Remove-Serviceコマンドレットが利用できる場合は、下記コマンドでサービスの削除ができます。
Remove-Service -Name "MyTestService"