Подтвердить что ты не робот

Найти местоположение исполняемого файла моего приложения в WPF (С# или vb.net)?

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

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

Application.ExecutablePath.ToString();

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

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

System.AppDomain.CurrentDomain.BaseDirectory

Только в VB:

My.Application.Info.DirectoryPath

Ответ 3

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

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

Итак, лучший способ найти (С#):

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;

Ответ 4

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

Process.GetCurrentProcess().MainModule.FileName;

Ответ 5

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

в моей обновленной версии Hotspotizer (http://github.com/birbilis/Hotspotizer), я только что добавил поддержку загрузки файла Gesture Collection при запуске, если найденный в 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));