Find the location of my application's executable in WPF (C# or vb.net)?

前端 未结 7 1343
借酒劲吻你
借酒劲吻你 2020-12-08 04:02

How can I find the location of my application\'s executable in WPF (C# or VB.Net)?

I\'ve used this code with windows forms:

Application.ExecutablePat         


        
相关标签:
7条回答
  • 2020-12-08 04:23

    Environment.CurrentDirectory returns parent directory of exe file

    0 讨论(0)
  • 2020-12-08 04:24

    The executing assembly can be a DLL if the code is located in a library:

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

    So the best way I found is (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();
    

    So in your case, you can find location of the assembly :

    var location = wpfAssembly.Location;
    
    0 讨论(0)
  • 2020-12-08 04:26

    Based on others answers, here's an example that shows how to remove the executable name from the path and combine the result with some subfolder and filename:

    at my updated version of Hotspotizer (http://github.com/birbilis/Hotspotizer), I've just added support for loading a Gesture Collection file at startup, if found at Library\Default.hsjson, by using the following code:

    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));
    
    0 讨论(0)
  • 2020-12-08 04:31

    System.Reflection.Assembly.GetExecutingAssembly().Location should work.

    0 讨论(0)
  • 2020-12-08 04:36

    this is useful for you: Application.ExecutablePath equals to:

    Process.GetCurrentProcess().MainModule.FileName;
    
    0 讨论(0)
  • 2020-12-08 04:41

    Several alternatives:

    Directory.GetParent(Assembly.GetExecutingAssembly().Location)
    
    System.AppDomain.CurrentDomain.BaseDirectory
    

    Only in VB:

    My.Application.Info.DirectoryPath
    
    0 讨论(0)
提交回复
热议问题