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