Настройка базового пути службы Windows и чтение переменных среды

Я создал службу 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 17.12.2018 00:02

@ Gonzo345, System.Environment.GetEnvironmentVariable («ASPNETCORE_ENVIRO‌ NMENT») не возвращает пользовательское или системное значение, установленное в службе Windows. Если я получу это, у меня будет простое решение для SetBasePath ().

Mark McWhirter 17.12.2018 03:00
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
2
1 508
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

вы можете легко использовать переменные среды. Пример

var profilePath = Configuration<string>["PROFILEPATH"] 

предоставит вам ProfilePath

Но имейте в виду, что ваша служба работает под одним из пользователей системы, поэтому его базовый путь относится к c:\Windows\System32.

да, я понимаю - если я могу заставить GetEnvironmentVariable работать, я могу установить BasePath в переменную среды и решить свои проблемы.

Mark McWhirter 17.12.2018 03:07

Итак, проблема с окружающей средой оказалась проблемой из-за отложенного ответа от моего виртуального ящика. Теперь можно прочитать среду, и я могу настроить профиль. Спасибо за это!

Mark McWhirter 17.12.2018 05:41

Другие вопросы по теме