web-dev-qa-db-ja.com

WPF(C#またはvb.net)でアプリケーションの実行可能ファイルの場所を見つけますか?

WPF(C#またはVB.Net)でアプリケーションの実行可能ファイルの場所を見つけるにはどうすればよいですか?

このコードをWindowsフォームで使用しました。

Application.ExecutablePath.ToString();

しかし、WPFでは、Visual Studioからこのエラーを受け取りました。

System.Window.Applicationには、ExecutablePathの定義が含まれていません。

46
Shahin

System.Reflection.Assembly.GetExecutingAssembly().Locationは動作するはずです。

87
Blorgbeard

いくつかの選択肢:

Directory.GetParent(Assembly.GetExecutingAssembly().Location)

System.AppDomain.CurrentDomain.BaseDirectory

VBのみ:

My.Application.Info.DirectoryPath
32
Konrad Rudolph

これはあなたにとって便利です:Application.ExecutablePathは次と等しい:

Process.GetCurrentProcess().MainModule.FileName;
7
dexiang

コードがライブラリにある場合、実行中のアセンブリは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;
2
scrat789

他の回答に基づいて、パスから実行可能ファイル名を削除し、その結果をサブフォルダーとファイル名と組み合わせる方法を示す例を次に示します。

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));
0
George Birbilis