. NET CORE 3 Базовый путь службы Windows возвращает C: \ Windows \ System32, но фактическая папка - D: \ MyCustomService. - PullRequest
1 голос
/ 16 января 2020

Здесь AppContext.BaseDirectory всегда возвращает C: \ Windows \ System32, но мы ожидаем D: \ MyCustomService - где у нас есть фактические файлы.

Пожалуйста, найдите мой следующий код. Можете ли вы предложить, где это идет не так, а также я попробовал все другие варианты, такие как CurrentDirectory, System.Reflection.Assembly.GetEntryAssembly (). Location, Process.GetCurrentProcess (). MainModule.FileName; et c

Мы установили сервер с помощью следующей команды

s c create "myServiceName" binPath = "D: \ MyCustomService \ myServiceName.exe"

public class Program
{
        public static void Main(string[] args)
        {
            const string loggerTemplate = @"{Timestamp:yyyy-MM-dd HH:mm:ss} [{Level:u4}]<{ThreadId}> [{SourceContext:l}] {Message:lj}{NewLine}{Exception}";

            var baseDir = AppContext.BaseDirectory;

            Console.WriteLine(baseDir);

            var logfile = Path.Combine(baseDir, "App_Data", "logs", "log.txt");
            Log.Logger = new LoggerConfiguration()
                .MinimumLevel.Override("Microsoft", LogEventLevel.Warning)
                .Enrich.With(new ThreadIdEnricher())
                .Enrich.FromLogContext()
                .WriteTo.Console(LogEventLevel.Information, loggerTemplate, theme: AnsiConsoleTheme.Literate)
                .WriteTo.File(logfile, LogEventLevel.Information, loggerTemplate, rollingInterval: RollingInterval.Day, retainedFileCountLimit: 90)
                .CreateLogger();
            try
            {
                CreateHostBuilder(args).Build().Run();
            }
            catch (Exception ex)
            {
                Log.Fatal(ex, "Application terminated unexpectedly");
            }
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
            .ConfigureServices((hostContext, services) =>
            {
                services.AddHostedService<Worker>();
            })
            .UseWindowsService();
}

1 Ответ

0 голосов
/ 17 января 2020

Очевидно, вы не можете, потому что служба Windows работает в указанной вами папке, прочитайте документацию Microsoft :

Не пытайтесь использовать GetCurrentDirectory для получения ресурса путь, потому что приложение службы Windows возвращает папку C: \ WINDOWS \ system32 в качестве текущего каталога.

...