C# 获取程序路径的几种方法及其区别

在开发的程序中使用自定义的配置文件属于基本的操作了,但最近发现一个问题:如果程序是由用户通过exe文件直接打开的,获取同目录下配置文件不会有问题;但如果程序是由第三方应用启动的,通过不同方式获取的“当前目录”会有不同。

以下是整理的几种获取当前目录的方式,及官方文档中的注释:

string str1=Process.GetCurrentProcess().MainModule.FileName;//获取模块的完整路径。
string str2=Environment.CurrentDirectory;//获取或设置当前工作目录的完全限定路径。
string str3=Directory.GetCurrentDirectory();//获取应用程序的当前工作目录。
string str4=AppDomain.CurrentDomain.BaseDirectory;//获取基目录,它由程序集冲突解决程序用来探测程序集。
string str5=Application.StartupPath;//获取启动了应用程序的可执行文件的路径,不包括可执行文件的名称。
string str6=Application.ExecutablePath;//获取启动了应用程序的可执行文件的路径,包括可执行文件的名称。
string str7=AppDomain.CurrentDomain.SetupInformation.ApplicationBase;//获取或设置包含该应用程序的目录的名称。
string str8=this.GetType().Assembly.Location;//获取包含清单的已加载文件的路径或UNC位置。

分别通过手动启动和第三方调用的方法启动应用程序(exe文件路径:D:\test\程序启动路径.exe),其值分别为:

手动启动

Process.GetCurrentProcess().MainModule.FileNameD:\test\程序启动路径.exe
Environment.CurrentDirectoryD:\test
Directory.GetCurrentDirectory()D:\test
AppDomain.CurrentDomain.BaseDirectoryD:\test\
Application.StartupPathD:\test
Application.ExecutablePathD:\test\程序启动路径.exe
AppDomain.CurrentDomain.SetupInformation.ApplicationBaseD:\test\
this.GetType().Assembly.LocationD:\test\程序启动路径.exe

通过Win+R打开运行,输入程序路径,或通过bat批处理命令运行,效果与直接打开一致。

C#使用System.Diagnostics.Process.Start()方法启动(调用方路径:E:\test

Process.GetCurrentProcess().MainModule.FileNameD:\test\程序启动路径.exe
Environment.CurrentDirectoryE:\test
Directory.GetCurrentDirectory()E:\test
AppDomain.CurrentDomain.BaseDirectoryD:\test\
Application.StartupPathD:\test
Application.ExecutablePathD:\test\程序启动路径.exe
AppDomain.CurrentDomain.SetupInformation.ApplicationBaseD:\test\
this.GetType().Assembly.LocationD:\test\程序启动路径.exe

通过cmd命令行启动:(cmd命令中直接输入 D:\test\程序启动路径.exe)

Process.GetCurrentProcess().MainModule.FileNameD:\test\程序启动路径.exe
Environment.CurrentDirectoryC:\Users\用户名
Directory.GetCurrentDirectory()C:\Users\用户名
AppDomain.CurrentDomain.BaseDirectoryD:\test\
Application.StartupPathD:\test
Application.ExecutablePathD:\test\程序启动路径.exe
AppDomain.CurrentDomain.SetupInformation.ApplicationBaseD:\test\
this.GetType().Assembly.LocationD:\test\程序启动路径.exe

通过LabVIEW中“执行系统命令”(System Exec.vi)启动:

Process.GetCurrentProcess().MainModule.FileNameD:\test\程序启动路径.exe
Environment.CurrentDirectoryC:\WINDOWS\system32
Directory.GetCurrentDirectory()C:\WINDOWS\system32
AppDomain.CurrentDomain.BaseDirectoryD:\test\
Application.StartupPathD:\test
Application.ExecutablePathD:\test\程序启动路径.exe
AppDomain.CurrentDomain.SetupInformation.ApplicationBaseD:\test\
this.GetType().Assembly.LocationD:\test\程序启动路径.exe

 此方法在不同电脑中表现不一致,没有对比是操作系统原因还是LabVIEW原因。在同事电脑上,Environment.CurrentDirectory和Directory.GetCurrentDirectory()方式获取的路径为C:\Users\用户名\Desktop

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值