有以下几种选择:

直接获取可执行文件路径

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 日
如果觉得我的文章对你有用,请随意赞赏