Worker Service 在 System32 文件夹而不是本地文件夹中查找 appsettings.json

Aji*_*ith 5 windows-services worker-process appsettings .net-core asp.net-core

我有一个 .Net 核心工作服务,它作为 Windows 服务运行。该服务使用 appsettings.json 文件作为配置信息。使用SC CREATE命令安装服务后,服务失败。

在事件查看器中,我发现了错误,它找不到文件C:\Windows\System32\appsettings.json。我的服务文件放置在不同的文件夹中c:\Services\,而不是查看该位置,该服务正在查找 System32 文件夹中的文件。

配置注册如下。

 var configBuilder = new ConfigurationBuilder()
                   .SetBasePath(Directory.GetCurrentDirectory())
                   .AddJsonFile("appsettings.json");
var configuration = configBuilder.Build();
            services.AddSingleton(configuration);
Run Code Online (Sandbox Code Playgroud)

如何让服务查看本地文件夹?

itm*_*nus 6

那是因为当前目录C:\Windows\System32在运行时更改为。您可以通过Assembly.GetExecutingAssembly(). 例如:

var configBuilder = new ConfigurationBuilder()
    .SetBasePath( Path.GetDirectoryName( Assembly.GetExecutingAssembly().Location))
    .AddJsonFile("appsettings.json");
var configuration = configBuilder.Build();
Run Code Online (Sandbox Code Playgroud)


vie*_*a42 6

I\xc2\xb4ve 成功使用Windows 服务中的 Host ASP.NET Core中的文档

\n

简而言之,您应该只添加.UseWindowsService()配置构建器步骤,如下所示:

\n
Host.CreateDefaultBuilder(args)\n    .UseWindowsService()\n    .ConfigureAppConfiguration((hostContext, configuration) => \n        {\n            //...set your configurations here\n        })\n        .ConfigureServices((hostContext, services) =>\n        {\n            //...configure you services here\n        }\n
Run Code Online (Sandbox Code Playgroud)\n