Comment trouver l'emplacement de l'exécutable de mon application dans WPF (C # ou VB.Net)?
J'ai utilisé ce code avec les formulaires Windows:
Application.ExecutablePath.ToString();
Mais avec WPF, j'ai reçu cette erreur de Visual Studio:
System.Window.Application ne contient pas de définition pour ExecutablePath.
System.Reflection.Assembly.GetExecutingAssembly().Location
devrait fonctionner.
Plusieurs alternatives:
Directory.GetParent(Assembly.GetExecutingAssembly().Location)
System.AppDomain.CurrentDomain.BaseDirectory
Seulement en VB:
My.Application.Info.DirectoryPath
cela vous est utile: Application.ExecutablePath est égal à:
Process.GetCurrentProcess().MainModule.FileName;
L'assembly en cours d'exécution peut être un DLL si le code est situé dans une bibliothèque:
var executingAssembly = Assembly.GetExecutingAssembly(); //MyLibrary.dll
var callingAssembly = Assembly.GetCallingAssembly(); //MyLibrary.dll
var entryAssembly = Assembly.GetEntryAssembly(); //WpfApp.exe or MyLibrary.dll
Donc, le meilleur moyen que j'ai trouvé est (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();
Donc, dans votre cas, vous pouvez trouver l'emplacement de l'Assemblée:
var location = wpfAssembly.Location;
En vous basant sur d'autres réponses, voici un exemple qui montre comment supprimer le nom de l'exécutable du chemin et combiner le résultat avec un sous-dossier et un nom de fichier:
sur ma version mise à jour de Hotspotizer ( http://github.com/birbilis/Hotspotizer ), je viens d’ajouter un support pour le chargement d’un fichier Gesture Collection au démarrage, s’il se trouve dans Library\Default.hsjson, en utilisant le code suivant:
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));