有以下几种选择:

直接获取可执行文件路径

Environment.ProcessPath

尽管文档中提到,该值可能返回空,但是在 Windows 桌面应用程序开发时,这几乎是不可能的,也许在其他的平台上会出现为空的情况?

Process.GetCurrentProcess().MainModule.FileName

非常低效,在文档中提示使用 System.Environment.ProcessPath 替代。

AppContext.BaseDirectory

似乎很不错,Playwright 正在使用这一方法。

AppDomain.CurrentDomain.BaseDirectory

AppContext.BaseDirectory 是等效的,并且在新版 .NET Core 中,不再支持多个应用程序域,因此没有必要再使用了。

Environment.CurrentDirectory

提供的是应用程序被执行的位置,不一定是应用程序可执行文件本身所在的目录。

IO.Directory.GetCurrentDirectory()

同上。

直接获取应用程序目录

AppContext.BaseDirectory

似乎很不错,Playwright 正在使用这一方法。

AppDomain.CurrentDomain.BaseDirectory

AppContext.BaseDirectory 是等效的,并且在新版 .NET Core 中,不再支持多个应用程序域,因此没有必要再使用了。

Environment.CurrentDirectory

提供的是应用程序被执行的位置,不一定是应用程序可执行文件本身所在的目录。

IO.Directory.GetCurrentDirectory()

同上。

通过 Assembly 获取程序目录

var assembly = typeof(Xxx).Assembly
//var assembly = Reflection.Assembly.GetExecutingAssembly()

先获取一个 Assembly 再说。

//Uri codeBase;
//Uri.TryCreate(assembly.CodeBase, UriKind.Absolute, out codeBase)
//new FileInfo(codeBase.LocalPath).Directory;

以上代码中,CodeBase 已不再受支持,文档提示使用 assembly.Location 替代。

IO.Path.GetDirectoryName(assembly.Location) // 有用?
new FileInfo(assembly.Location).Directory;// 不知道和上一行有什么区别

性能相比前面的更差,且获得的可能是 DLL 文件而不是 EXE 文件的路径或文件名,并且 ,在调试模式下表现可能和发布后单独运行不一致(有可能为空)。

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

Best way to get application folder path

最后修改:2026 年 08 月 09 日
如果觉得我的文章对你有用,请随意赞赏