Skip to content

Commit

Permalink
Add UseWindowsService() IServiceCollection extension method
Browse files Browse the repository at this point in the history
  • Loading branch information
halter73 committed Apr 27, 2022
1 parent 0544e37 commit 38605bb
Show file tree
Hide file tree
Showing 9 changed files with 326 additions and 86 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@ namespace Microsoft.Extensions.Hosting
public static class SystemdHostBuilderExtensions
{
/// <summary>
/// Configures the <see cref="IHost"/> lifetime to <see cref="SystemdLifetime"/>
/// which provides notification messages for application started and stopping,
/// Configures the <see cref="IHost"/> lifetime to <see cref="SystemdLifetime"/>,
/// provides notification messages for application started and stopping,
/// and configures console logging to the systemd format.
/// </summary>
/// <remarks>
Expand All @@ -28,22 +28,22 @@ public static class SystemdHostBuilderExtensions
/// </para>
/// </remarks>
/// <param name="hostBuilder">The <see cref="IHostBuilder"/> to configure.</param>
/// <returns>The <paramref name="hostBuilder"/> instance.</returns>
/// <returns>The <paramref name="hostBuilder"/> instance for chaining.</returns>
public static IHostBuilder UseSystemd(this IHostBuilder hostBuilder)
{
if (SystemdHelpers.IsSystemdService())
{
hostBuilder.ConfigureServices((hostContext, services) =>
{
AddSystemdServices(services);
AddSystemdLifetime(services);
});
}
return hostBuilder;
}

/// <summary>
/// Configures the lifetime of the <see cref="IHost"/> built from <paramref name="services"/> to
/// <see cref="SystemdLifetime"/> which provides notification messages for application started
/// <see cref="SystemdLifetime"/> provides notification messages for application started
/// and stopping, and configures console logging to the systemd format.
/// </summary>
/// <remarks>
Expand All @@ -59,18 +59,19 @@ public static IHostBuilder UseSystemd(this IHostBuilder hostBuilder)
/// <param name="services">
/// The <see cref="IServiceCollection"/> used to build the <see cref="IHost"/>.
/// For example, <see cref="HostApplicationBuilder.Services"/> or the <see cref="IServiceCollection"/> passed to the
/// <see cref="IHostBuilder.ConfigureServices(System.Action{HostBuilderContext, IServiceCollection})"/> callback.</param>
/// <returns>The <paramref name="services"/> instance.</returns>
/// <see cref="IHostBuilder.ConfigureServices(System.Action{HostBuilderContext, IServiceCollection})"/> callback.
/// </param>
/// <returns>The <paramref name="services"/> instance for chaining.</returns>
public static IServiceCollection UseSystemd(this IServiceCollection services)
{
if (SystemdHelpers.IsSystemdService())
{
AddSystemdServices(services);
AddSystemdLifetime(services);
}
return services;
}

private static void AddSystemdServices(IServiceCollection services)
private static void AddSystemdLifetime(IServiceCollection services)
{
services.Configure<ConsoleLoggerOptions>(options =>
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,24 +17,22 @@ public void DefaultsToOffOutsideOfService()
.Build();

var lifetime = host.Services.GetRequiredService<IHostLifetime>();
Assert.NotNull(lifetime);
Assert.IsNotType<SystemdLifetime>(lifetime);
}

[Fact]
public void ServiceCollectionExtensoinMethodDefaultsToOffOutsideOfService()
public void ServiceCollectionExtensionMethodDefaultsToOffOutsideOfService()
{
HostApplicationBuilder builder = new HostApplicationBuilder(new HostApplicationBuilderSettings
var builder = new HostApplicationBuilder(new HostApplicationBuilderSettings
{
// Disable defaults that may not be supported on the testing platform like EventLogLoggerProvider.
DisableDefaults = true,
});
builder.Services.UseSystemd();

builder.Services.UseSystemd();
using IHost host = builder.Build();

var lifetime = host.Services.GetRequiredService<IHostLifetime>();
Assert.NotNull(lifetime);
Assert.IsNotType<SystemdLifetime>(lifetime);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,10 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{76933DF1-12A
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "gen", "gen", "{0D30E826-4EE9-4404-A74D-5255FDB76A12}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{B5A1E071-9B14-4D1E-9414-42A98BDB014A}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Hosting.WindowsServices.Tests", "tests\Microsoft.Extensions.Hosting.WindowsServices.Tests.csproj", "{4D358847-F35E-4F5D-8426-3403EE36E452}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Expand Down Expand Up @@ -455,85 +459,90 @@ Global
{CBC162FE-2E2F-4511-98AB-81E13E2DEE9C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{CBC162FE-2E2F-4511-98AB-81E13E2DEE9C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{CBC162FE-2E2F-4511-98AB-81E13E2DEE9C}.Release|Any CPU.Build.0 = Release|Any CPU
{4D358847-F35E-4F5D-8426-3403EE36E452}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4D358847-F35E-4F5D-8426-3403EE36E452}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4D358847-F35E-4F5D-8426-3403EE36E452}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4D358847-F35E-4F5D-8426-3403EE36E452}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{44AC224A-BB08-434A-9443-A1C98805B582} = {BFC0CC54-6781-45CB-865F-72E9FABBD023}
{1D6514B4-3B0A-4E3F-BBA2-DB4BAD9502CA} = {76933DF1-12AA-4B5B-8863-EF38F10B1EC9}
{B9D4CBED-3F96-4504-BA25-18CC9CBDDD9F} = {BFC0CC54-6781-45CB-865F-72E9FABBD023}
{6120E7CF-3074-46C6-BDD1-1863784EAC69} = {76933DF1-12AA-4B5B-8863-EF38F10B1EC9}
{064D7281-3211-40E2-ABE1-B3F16160B027} = {BFC0CC54-6781-45CB-865F-72E9FABBD023}
{A70A8EA7-24B3-42BF-83A6-94EB9B5C3C6C} = {76933DF1-12AA-4B5B-8863-EF38F10B1EC9}
{C84980C7-A5FF-479E-838D-DB1D8F9F930C} = {BFC0CC54-6781-45CB-865F-72E9FABBD023}
{9026F7BB-2FB6-4B37-A4E7-32030FBA4B92} = {76933DF1-12AA-4B5B-8863-EF38F10B1EC9}
{A18D00F9-DB54-4772-9DFD-580806F07AEE} = {BFC0CC54-6781-45CB-865F-72E9FABBD023}
{7E9B3AA8-5E87-4B19-9604-FE51C6548882} = {76933DF1-12AA-4B5B-8863-EF38F10B1EC9}
{CBBCEF4D-B2F4-497D-938F-76025EC0D142} = {BFC0CC54-6781-45CB-865F-72E9FABBD023}
{F9745791-BD7B-4337-BE8B-8AEEEB933E84} = {76933DF1-12AA-4B5B-8863-EF38F10B1EC9}
{D1C4E375-6395-4D4C-9AC2-0611C78823E3} = {BFC0CC54-6781-45CB-865F-72E9FABBD023}
{D7EC07C4-7679-4E97-B3A9-60D03607F758} = {76933DF1-12AA-4B5B-8863-EF38F10B1EC9}
{C409E70E-77E2-46EE-BE71-0D6F7277FC06} = {BFC0CC54-6781-45CB-865F-72E9FABBD023}
{720A0CB6-828B-47EF-BC1C-0B98E52BBFCE} = {76933DF1-12AA-4B5B-8863-EF38F10B1EC9}
{8E08B694-3806-492C-BCEC-7B74420E3041} = {BFC0CC54-6781-45CB-865F-72E9FABBD023}
{B1AEB3DD-F8D6-48D1-8DB4-B232DA4103A0} = {76933DF1-12AA-4B5B-8863-EF38F10B1EC9}
{749A4A89-3CA2-49E1-B03C-3AB1A1C6FAFD} = {BFC0CC54-6781-45CB-865F-72E9FABBD023}
{C9B7388B-0963-49A3-AB52-3E3B724EE2A9} = {76933DF1-12AA-4B5B-8863-EF38F10B1EC9}
{F5C79255-45C9-464F-A5A7-EB9678B3F9AD} = {BFC0CC54-6781-45CB-865F-72E9FABBD023}
{C913A82A-3C17-4991-8F66-9D9F0B841E5E} = {76933DF1-12AA-4B5B-8863-EF38F10B1EC9}
{2D1CD2A4-2440-47AB-9C43-33C595ECE5F1} = {BFC0CC54-6781-45CB-865F-72E9FABBD023}
{67A6FA6A-F171-4A00-80ED-113736B2B5B5} = {76933DF1-12AA-4B5B-8863-EF38F10B1EC9}
{C6B1BE99-1AC3-4D2A-BD5B-74DBD8449C17} = {BFC0CC54-6781-45CB-865F-72E9FABBD023}
{07A9935C-015D-43DD-9CDE-809301151F7C} = {76933DF1-12AA-4B5B-8863-EF38F10B1EC9}
{C114AFF6-377C-4694-B869-3B590317E87A} = {BFC0CC54-6781-45CB-865F-72E9FABBD023}
{BAE78100-3020-4AAE-BDBF-ACF9D1D1BA2F} = {76933DF1-12AA-4B5B-8863-EF38F10B1EC9}
{116CF183-FD4A-4121-AEE9-1DF8C51BF858} = {BFC0CC54-6781-45CB-865F-72E9FABBD023}
{FB7C602E-3ED6-472A-85BD-420B61BA293D} = {76933DF1-12AA-4B5B-8863-EF38F10B1EC9}
{6D588F82-927E-488F-8417-DE538FF10B77} = {BFC0CC54-6781-45CB-865F-72E9FABBD023}
{89A6E38E-1118-4FC6-957D-17751DAD8EAF} = {76933DF1-12AA-4B5B-8863-EF38F10B1EC9}
{0A7BF932-04A6-458B-8D6F-4F474F553BE6} = {BFC0CC54-6781-45CB-865F-72E9FABBD023}
{36FAE390-EAAE-4193-98E7-34F10D3FA8E1} = {76933DF1-12AA-4B5B-8863-EF38F10B1EC9}
{D3A7C7B1-10DC-45E9-8678-2C964A1459D7} = {0D30E826-4EE9-4404-A74D-5255FDB76A12}
{59BC5420-D5C8-4689-8F9E-1E8AC338180E} = {0D30E826-4EE9-4404-A74D-5255FDB76A12}
{723957C4-C433-4B6D-BF0C-28AE36AEDDBD} = {BFC0CC54-6781-45CB-865F-72E9FABBD023}
{E5F61C36-FB9B-4DA7-96C0-056FBEADBB53} = {76933DF1-12AA-4B5B-8863-EF38F10B1EC9}
{6D95CEB5-A6AD-481F-9B7D-B8A7BA6B8529} = {BFC0CC54-6781-45CB-865F-72E9FABBD023}
{B0D60DB8-2A4A-4B8B-83DF-A1C66BDD0982} = {76933DF1-12AA-4B5B-8863-EF38F10B1EC9}
{2F9BC027-8D9A-4B9D-847F-388399FA7AB1} = {BFC0CC54-6781-45CB-865F-72E9FABBD023}
{C573763D-C24C-4222-AAF0-66B0C2260EB4} = {76933DF1-12AA-4B5B-8863-EF38F10B1EC9}
{2C86C662-3611-4B50-8FC5-E54D7AEFD899} = {BFC0CC54-6781-45CB-865F-72E9FABBD023}
{388F4768-2C2B-43F1-910A-E50F47130368} = {76933DF1-12AA-4B5B-8863-EF38F10B1EC9}
{7EE41AEA-D25F-4A71-A5E3-8FEF863F794E} = {BFC0CC54-6781-45CB-865F-72E9FABBD023}
{FCD95D0E-50AC-4FCF-AE52-8B38DB9B15C3} = {76933DF1-12AA-4B5B-8863-EF38F10B1EC9}
{0089C597-09A8-478B-9D0B-0B85C5A35A67} = {BFC0CC54-6781-45CB-865F-72E9FABBD023}
{90DFE463-DBD1-42F3-A33F-4D22E5C1DA4D} = {76933DF1-12AA-4B5B-8863-EF38F10B1EC9}
{D2632F0B-81B0-4E95-B2E7-599C6194B8CB} = {BFC0CC54-6781-45CB-865F-72E9FABBD023}
{DDB95DB9-3E70-4F3E-B9D0-217A14215356} = {76933DF1-12AA-4B5B-8863-EF38F10B1EC9}
{F841278B-AA28-4F9D-8483-754CA50F07FC} = {BFC0CC54-6781-45CB-865F-72E9FABBD023}
{83D8F9FB-0A8D-4E48-A7CF-D169432A41AD} = {76933DF1-12AA-4B5B-8863-EF38F10B1EC9}
{70A40879-BA02-4860-9A55-D13DE8A456D8} = {BFC0CC54-6781-45CB-865F-72E9FABBD023}
{5DBF21B8-1E05-4774-A63D-E6C22CDFEA1A} = {76933DF1-12AA-4B5B-8863-EF38F10B1EC9}
{99E2010C-A3C7-4921-A15C-906C308857F5} = {BFC0CC54-6781-45CB-865F-72E9FABBD023}
{2F2D5292-9A79-4654-A470-2C7E974C4EF0} = {76933DF1-12AA-4B5B-8863-EF38F10B1EC9}
{2B13CBB4-E3B9-4AD1-983A-BA85EB3D5F8D} = {BFC0CC54-6781-45CB-865F-72E9FABBD023}
{3BB5B390-66F6-4FCD-A7FE-1A9326A4D914} = {76933DF1-12AA-4B5B-8863-EF38F10B1EC9}
{BCF8EC9B-1FED-4A44-9E64-A59015D9B141} = {BFC0CC54-6781-45CB-865F-72E9FABBD023}
{166F8860-E965-4E2D-A6C6-4CA44C9B5A1E} = {76933DF1-12AA-4B5B-8863-EF38F10B1EC9}
{E628527E-B7BD-4F3B-8045-EC7C887B1FC1} = {76933DF1-12AA-4B5B-8863-EF38F10B1EC9}
{F042EF08-55E7-45A3-A1D2-BE19E896BE9F} = {BFC0CC54-6781-45CB-865F-72E9FABBD023}
{34C7A201-C14D-4586-9903-8358EF179EAD} = {0D30E826-4EE9-4404-A74D-5255FDB76A12}
{11EE7722-5FA4-403C-B53B-59A154EE0267} = {0D30E826-4EE9-4404-A74D-5255FDB76A12}
{8FBBC1A7-3043-4707-A6BC-477A31D4307D} = {BFC0CC54-6781-45CB-865F-72E9FABBD023}
{55B88031-3C95-499F-B2AF-CF531312F1FD} = {BFC0CC54-6781-45CB-865F-72E9FABBD023}
{7233680A-1706-4A7C-906B-8D6C7E60D56A} = {BFC0CC54-6781-45CB-865F-72E9FABBD023}
{35F7F32D-B404-46B3-8FCE-CFEBEC7114C3} = {BFC0CC54-6781-45CB-865F-72E9FABBD023}
{CBC162FE-2E2F-4511-98AB-81E13E2DEE9C} = {BFC0CC54-6781-45CB-865F-72E9FABBD023}
{1D6514B4-3B0A-4E3F-BBA2-DB4BAD9502CA} = {76933DF1-12AA-4B5B-8863-EF38F10B1EC9}
{6120E7CF-3074-46C6-BDD1-1863784EAC69} = {76933DF1-12AA-4B5B-8863-EF38F10B1EC9}
{A70A8EA7-24B3-42BF-83A6-94EB9B5C3C6C} = {76933DF1-12AA-4B5B-8863-EF38F10B1EC9}
{9026F7BB-2FB6-4B37-A4E7-32030FBA4B92} = {76933DF1-12AA-4B5B-8863-EF38F10B1EC9}
{7E9B3AA8-5E87-4B19-9604-FE51C6548882} = {76933DF1-12AA-4B5B-8863-EF38F10B1EC9}
{F9745791-BD7B-4337-BE8B-8AEEEB933E84} = {76933DF1-12AA-4B5B-8863-EF38F10B1EC9}
{D7EC07C4-7679-4E97-B3A9-60D03607F758} = {76933DF1-12AA-4B5B-8863-EF38F10B1EC9}
{720A0CB6-828B-47EF-BC1C-0B98E52BBFCE} = {76933DF1-12AA-4B5B-8863-EF38F10B1EC9}
{B1AEB3DD-F8D6-48D1-8DB4-B232DA4103A0} = {76933DF1-12AA-4B5B-8863-EF38F10B1EC9}
{C9B7388B-0963-49A3-AB52-3E3B724EE2A9} = {76933DF1-12AA-4B5B-8863-EF38F10B1EC9}
{C913A82A-3C17-4991-8F66-9D9F0B841E5E} = {76933DF1-12AA-4B5B-8863-EF38F10B1EC9}
{67A6FA6A-F171-4A00-80ED-113736B2B5B5} = {76933DF1-12AA-4B5B-8863-EF38F10B1EC9}
{07A9935C-015D-43DD-9CDE-809301151F7C} = {76933DF1-12AA-4B5B-8863-EF38F10B1EC9}
{BAE78100-3020-4AAE-BDBF-ACF9D1D1BA2F} = {76933DF1-12AA-4B5B-8863-EF38F10B1EC9}
{FB7C602E-3ED6-472A-85BD-420B61BA293D} = {76933DF1-12AA-4B5B-8863-EF38F10B1EC9}
{89A6E38E-1118-4FC6-957D-17751DAD8EAF} = {76933DF1-12AA-4B5B-8863-EF38F10B1EC9}
{36FAE390-EAAE-4193-98E7-34F10D3FA8E1} = {76933DF1-12AA-4B5B-8863-EF38F10B1EC9}
{E5F61C36-FB9B-4DA7-96C0-056FBEADBB53} = {76933DF1-12AA-4B5B-8863-EF38F10B1EC9}
{B0D60DB8-2A4A-4B8B-83DF-A1C66BDD0982} = {76933DF1-12AA-4B5B-8863-EF38F10B1EC9}
{C573763D-C24C-4222-AAF0-66B0C2260EB4} = {76933DF1-12AA-4B5B-8863-EF38F10B1EC9}
{388F4768-2C2B-43F1-910A-E50F47130368} = {76933DF1-12AA-4B5B-8863-EF38F10B1EC9}
{FCD95D0E-50AC-4FCF-AE52-8B38DB9B15C3} = {76933DF1-12AA-4B5B-8863-EF38F10B1EC9}
{90DFE463-DBD1-42F3-A33F-4D22E5C1DA4D} = {76933DF1-12AA-4B5B-8863-EF38F10B1EC9}
{DDB95DB9-3E70-4F3E-B9D0-217A14215356} = {76933DF1-12AA-4B5B-8863-EF38F10B1EC9}
{83D8F9FB-0A8D-4E48-A7CF-D169432A41AD} = {76933DF1-12AA-4B5B-8863-EF38F10B1EC9}
{5DBF21B8-1E05-4774-A63D-E6C22CDFEA1A} = {76933DF1-12AA-4B5B-8863-EF38F10B1EC9}
{2F2D5292-9A79-4654-A470-2C7E974C4EF0} = {76933DF1-12AA-4B5B-8863-EF38F10B1EC9}
{3BB5B390-66F6-4FCD-A7FE-1A9326A4D914} = {76933DF1-12AA-4B5B-8863-EF38F10B1EC9}
{166F8860-E965-4E2D-A6C6-4CA44C9B5A1E} = {76933DF1-12AA-4B5B-8863-EF38F10B1EC9}
{E628527E-B7BD-4F3B-8045-EC7C887B1FC1} = {76933DF1-12AA-4B5B-8863-EF38F10B1EC9}
{3636C4FF-4BBD-4BB8-B60B-E62F2C429EA4} = {76933DF1-12AA-4B5B-8863-EF38F10B1EC9}
{7233680A-1706-4A7C-906B-8D6C7E60D56A} = {BFC0CC54-6781-45CB-865F-72E9FABBD023}
{2D8B86CE-7A3A-45F0-9127-AE6CDCEC6EA5} = {76933DF1-12AA-4B5B-8863-EF38F10B1EC9}
{C50BBD27-2445-4DF4-9A1D-C7919D016BBC} = {76933DF1-12AA-4B5B-8863-EF38F10B1EC9}
{D3A7C7B1-10DC-45E9-8678-2C964A1459D7} = {0D30E826-4EE9-4404-A74D-5255FDB76A12}
{59BC5420-D5C8-4689-8F9E-1E8AC338180E} = {0D30E826-4EE9-4404-A74D-5255FDB76A12}
{34C7A201-C14D-4586-9903-8358EF179EAD} = {0D30E826-4EE9-4404-A74D-5255FDB76A12}
{11EE7722-5FA4-403C-B53B-59A154EE0267} = {0D30E826-4EE9-4404-A74D-5255FDB76A12}
{0EC461A2-083B-4E9E-AADE-935ECB15B951} = {0D30E826-4EE9-4404-A74D-5255FDB76A12}
{2CEA1741-8B0C-41F8-9CA9-B827D329261F} = {0D30E826-4EE9-4404-A74D-5255FDB76A12}
{35F7F32D-B404-46B3-8FCE-CFEBEC7114C3} = {BFC0CC54-6781-45CB-865F-72E9FABBD023}
{C50BBD27-2445-4DF4-9A1D-C7919D016BBC} = {76933DF1-12AA-4B5B-8863-EF38F10B1EC9}
{CBC162FE-2E2F-4511-98AB-81E13E2DEE9C} = {BFC0CC54-6781-45CB-865F-72E9FABBD023}
{4D358847-F35E-4F5D-8426-3403EE36E452} = {B5A1E071-9B14-4D1E-9414-42A98BDB014A}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {81854B5B-5AA0-49DC-9B7B-9E2DB24D7507}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ namespace Microsoft.Extensions.Hosting
{
public static partial class WindowsServiceLifetimeHostBuilderExtensions
{
public static Microsoft.Extensions.DependencyInjection.IServiceCollection UseWindowsService(this Microsoft.Extensions.DependencyInjection.IServiceCollection services) { throw null; }
public static Microsoft.Extensions.DependencyInjection.IServiceCollection UseWindowsService(this Microsoft.Extensions.DependencyInjection.IServiceCollection services, System.Action<Microsoft.Extensions.Hosting.WindowsServiceLifetimeOptions> configure) { throw null; }
public static Microsoft.Extensions.Hosting.IHostBuilder UseWindowsService(this Microsoft.Extensions.Hosting.IHostBuilder hostBuilder) { throw null; }
public static Microsoft.Extensions.Hosting.IHostBuilder UseWindowsService(this Microsoft.Extensions.Hosting.IHostBuilder hostBuilder, System.Action<Microsoft.Extensions.Hosting.WindowsServiceLifetimeOptions> configure) { throw null; }
}
Expand All @@ -21,10 +23,10 @@ namespace Microsoft.Extensions.Hosting.WindowsServices
{
public static partial class WindowsServiceHelpers
{
[System.Runtime.Versioning.SupportedOSPlatformGuard("windows")]
[System.Runtime.Versioning.SupportedOSPlatformGuardAttribute("windows")]
public static bool IsWindowsService() { throw null; }
}
[System.Runtime.Versioning.SupportedOSPlatform("windows")]
[System.Runtime.Versioning.SupportedOSPlatformAttribute("windows")]
public partial class WindowsServiceLifetime : System.ServiceProcess.ServiceBase, Microsoft.Extensions.Hosting.IHostLifetime
{
public WindowsServiceLifetime(Microsoft.Extensions.Hosting.IHostEnvironment environment, Microsoft.Extensions.Hosting.IHostApplicationLifetime applicationLifetime, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory, Microsoft.Extensions.Options.IOptions<Microsoft.Extensions.Hosting.HostOptions> optionsAccessor) { }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,17 @@ public WindowsServiceLifetime(IHostEnvironment environment, IHostApplicationLife
ThrowHelper.ThrowIfNull(optionsAccessor);
ThrowHelper.ThrowIfNull(windowsServiceOptionsAccessor);

// REVIEW: Should we just log a warning instead?
// Only validate content root for the new IServiceCollection overload of UseWindowsServices() for maximum backwards compatibility.
// The IHostBuilder overload sets the content root unlike the IServiceCollection overload, so it should be less likely to be wrong anyway.
// We could try normalizing the paths before comparing, but if the ContentRootPath has changed from it's AppContext.BaseDirectory default,
// there's probably a misconfiguration.
if (windowsServiceOptionsAccessor.Value.ValidateContentRoot && !string.Equals(environment.ContentRootPath, AppContext.BaseDirectory, StringComparison.Ordinal))
{
throw new InvalidOperationException(
$"The IHostEnvironment.ConentRootPath value of '{environment.ContentRootPath}' must match the AppContext.BaseDirectory value of '{AppContext.BaseDirectory}' but is unequal.");
}

Environment = environment;
ApplicationLifetime = applicationLifetime;
Logger = loggerFactory.CreateLogger("Microsoft.Hosting.Lifetime");
Expand Down
Loading

0 comments on commit 38605bb

Please sign in to comment.