Найти расположение исполняемого файла моего приложения в WPF (C # или vb.net)? - PullRequest
45 голосов
/ 26 июня 2010

Как найти местоположение исполняемого файла моего приложения в WPF (C # или VB.Net)?

Я использовал этот код с формами Windows:

Application.ExecutablePath.ToString();

Но сWPF Я получил эту ошибку от Visual Studio:

System.Window.Application не содержит определения для ExecutablePath.

Ответы [ 5 ]

86 голосов
/ 26 июня 2010

System.Reflection.Assembly.GetExecutingAssembly().Location должно работать.

32 голосов
/ 26 июня 2010

Несколько альтернатив:

Directory.GetParent(Assembly.GetExecutingAssembly().Location)

System.AppDomain.CurrentDomain.BaseDirectory

Только в VB:

My.Application.Info.DirectoryPath
7 голосов
/ 16 июля 2017

это полезно для вас: Application.ExecutablePath равно:

Process.GetCurrentProcess().MainModule.FileName;
2 голосов
/ 17 марта 2014

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

var executingAssembly = Assembly.GetExecutingAssembly(); //MyLibrary.dll
var callingAssembly = Assembly.GetCallingAssembly(); //MyLibrary.dll
var entryAssembly = Assembly.GetEntryAssembly(); //WpfApp.exe or MyLibrary.dll

Итак, лучший способ, который я нашел, это (C #):

var wpfAssembly = (AppDomain.CurrentDomain
                .GetAssemblies()
                .Where(item => item.EntryPoint != null)
                .Select(item => 
                    new {item, applicationType = item.GetType(item.GetName().Name + ".App", false)})
                .Where(a => a.applicationType != null && typeof(System.Windows.Application)
                    .IsAssignableFrom(a.applicationType))
                    .Select(a => a.item))
            .FirstOrDefault();

Итак, в вашем случае вы можете найти место сборки:

var location = wpfAssembly.Location;
0 голосов
/ 03 декабря 2015

Основываясь на ответах других, вот пример, который показывает, как удалить имя исполняемого файла из пути и объединить результат с некоторой подпапкой и именем файла:

в моей обновленной версии Hotspotizer (http://github.com/birbilis/Hotspotizer), Я только что добавил поддержку загрузки файла коллекции жестов при запуске, если он найден в Library \ Default.hsjson, используя следующий код:

const string GESTURE_COLLECTION_LIBRARY_PATH = "Library"
const string DEFAULT_GESTURE_COLLECTION = "Default.hsjson"

//...

LoadGestureCollection(
  Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location),
  GESTURE_COLLECTION_LIBRARY_PATH,
  DEFAULT_GESTURE_COLLECTION));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...