Я создал службу Windows с .Net Core 2.2, используя Microsoft.Extensions.Hosting и консольное приложение. Я использовал ConfigurationBuilder включить сервисы конфигурации json следующим образом:
string environment = System.Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{environment}.json", optional: true)
.AddEnvironmentVariables()
.Build();
При отладке в Visual Studio базовый путь правильно устанавливается в Текущий каталог. Переменная среды ASPNETCORE_ENVIRONMENT устанавливается как на уровне пользователя, так и на уровне системы, а файлы конфигурации правильно распознаются и используются. Однако, когда я устанавливаю как службу Windows, базовый путь становится C: \ Windows \ system32, и у меня еще нет вызова переменных среды для работы. Я легко мог бы просто жестко закодировать базовый путь и поместить туда свои файлы конфигурации, но я теряю гибкость. Мне также нужно иметь возможность читать значения файла конфигурации внутри метода внутри процесса, связанного с событием.
Есть ли способ прочитать переменные среды, чтобы установить базовый путь и прочитать файлы конфигурации в методе привязки к событию?
@ Gonzo345, System.Environment.GetEnvironmentVariable («ASPNETCORE_ENVIRO NMENT») не возвращает пользовательское или системное значение, установленное в службе Windows. Если я получу это, у меня будет простое решение для SetBasePath ().





вы можете легко использовать переменные среды. Пример
var profilePath = Configuration<string>["PROFILEPATH"]
предоставит вам ProfilePath
Но имейте в виду, что ваша служба работает под одним из пользователей системы, поэтому его базовый путь относится к c:\Windows\System32.
да, я понимаю - если я могу заставить GetEnvironmentVariable работать, я могу установить BasePath в переменную среды и решить свои проблемы.
Итак, проблема с окружающей средой оказалась проблемой из-за отложенного ответа от моего виртуального ящика. Теперь можно прочитать среду, и я могу настроить профиль. Спасибо за это!
Я не понимаю, как используется служба, которую вы развертываете, но переменные среды должны помогать вам получать / получать доступ к программам, путям и так далее. Вкратце мы могли бы сказать, что они «глобальные переменные». Вы хотите поместить некоторые файлы в безопасную и "зависящую от пользователя" учетную запись / путь или около того?