WPF(C#またはVB.Net)でアプリケーションの実行可能ファイルの場所を見つけるにはどうすればよいですか?
このコードをWindowsフォームで使用しました。
Application.ExecutablePath.ToString();
しかし、WPFでは、Visual Studioからこのエラーを受け取りました。
System.Window.Applicationには、ExecutablePathの定義が含まれていません。
System.Reflection.Assembly.GetExecutingAssembly().Location
は動作するはずです。
いくつかの選択肢:
Directory.GetParent(Assembly.GetExecutingAssembly().Location)
System.AppDomain.CurrentDomain.BaseDirectory
VBのみ:
My.Application.Info.DirectoryPath
これはあなたにとって便利です:Application.ExecutablePathは次と等しい:
Process.GetCurrentProcess().MainModule.FileName;
コードがライブラリにある場合、実行中のアセンブリは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();
あなたの場合、アセンブリの場所を見つけることができます:
var location = wpfAssembly.Location;
他の回答に基づいて、パスから実行可能ファイル名を削除し、その結果をサブフォルダーとファイル名と組み合わせる方法を示す例を次に示します。
hotspotizerの更新バージョン( http://github.com/birbilis/Hotspotizer )で、Library\Default.hsjsonで見つかった場合、起動時にGesture Collectionファイルをロードするためのサポートを追加しました。 、次のコードを使用して:
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));