Как получить путь к каталогу, в котором находится файл .exe для консольного приложения. Net Core? - PullRequest
4 голосов
/ 06 марта 2020

Я хочу создать консольное приложение. Net, которое запускается планировщиком задач Windows. В этом консольном приложении я хочу найти путь к каталогу, в котором находится файл .exe приложения.

Я публикую sh приложение для создания файла .exe, запустив эту строку кода в командной строке: dotnet publish -r win-x64 -c Release /p:PublishSingleFile=true

Я считаю, что это может иметь какое-то отношение к странному поведению, описанному ниже.

Проблема, с которой я сталкиваюсь, заключается в том, что при запуске. EXE-файл путь, который он получает, не путь к папке, в которой он находится.

Чтобы продемонстрировать это, я написал это консольное приложение:

//program.cs

using System;
using System.Diagnostics;
using System.IO;
using System.Reflection;

namespace PathTest
{
    class Program
    {
        static void Main(string[] args)
        {
            Write(Directory.GetCurrentDirectory());

            Write(Assembly.GetExecutingAssembly().Location);

            Write(Assembly.GetExecutingAssembly().CodeBase);

            Write(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location));

            Write(AppDomain.CurrentDomain.BaseDirectory);

            Write(Environment.GetCommandLineArgs()[0]);

            Write(Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase));

            Write(Process.GetCurrentProcess().MainModule.FileName);

            Write(new Uri(Assembly.GetExecutingAssembly().CodeBase).LocalPath);

            Console.ReadKey();
        }

        readonly static Action<string> Write = (str) =>
        {
            Console.WriteLine(str);
            Console.WriteLine("");
        };
    }
}

Когда я отлаживаю эту программу, я получаю эти выходные данные: отладочный образ

Когда я запускаю файл .exe, я получаю следующие выходные данные: ручной запуск

Когда я использую Windows Task Планировщик для запуска файла .exe Я получаю следующие выходные данные: образ планировщика задач

Что я хотел бы знать: Какой код я должен использовать, чтобы получить путь к каталогу где находится файл .exe?

Почему путь к файлу папка mp возвращается?

1 Ответ

4 голосов
/ 06 марта 2020

Я нашел ответ благодаря этой проблеме: https://github.com/dotnet/runtime/issues/13051

Вы должны использовать: Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...