find我的应用程序的可执行文件在WPF(C#或vb.net)的位置?

我怎样才能find我的应用程序的可执行文件在WPF(C#或VB.Net)的位置?

我用这个代码与Windows窗体:

Application.ExecutablePath.ToString(); 

但与WPF我从Visual Studio收到这个错误:

System.Window.Application不包含ExecutablePath的定义。

System.Reflection.Assembly.GetExecutingAssembly().Location应该工作。

几个select:

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

只在VB中:

 My.Application.Info.DirectoryPath 

如果代码位于库中,执行程序集可以是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(); 

所以在你的情况下,你可以find程序集的位置:

 var location = wpfAssembly.Location; 

这对你有用:Application.ExecutablePath等于:

 Process.GetCurrentProcess().MainModule.FileName; 

基于其他答案,下面是一个示例,显示如何从path中删除可执行文件名称,并将结果与​​一些子文件夹和文件名相结合:

在Hotspotizer( http://github.com/birbilis/Hotspotizer )的更新版本中,我刚刚在启动时添加了对加载手势集合文件的支持(如果在Library \ Default.hsjson中find的话),请使用以下代码:

 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));