整理的几种获取当前目录的方式手动启动C#使用System.Diagnostics.Process.Start()方法启动通过cmd命令行启动通过LabVIEW中“执行系统命令”(System Exec.vi)启动总结
在开发的程序中使用自定义的配置文件属于基本的操作了,但最近发现一个问题:如果程序是由用户通过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.FileName | D:test程序启动路径.exe |
Environment.CurrentDirectory | D:test |
Directory.GetCurrentDirectory() | D:test |
AppDomain.CurrentDomain.BaseDirectory | D:test |
Application.StartupPath | D:test |
Application.ExecutablePath | D:test程序启动路径.exe |
AppDomain.CurrentDomain.SetupInformation.ApplicationBase | D:test |
this.GetType().Assembly.Location | D:test程序启动路径.exe |
通过Win+R打开运行,输入程序路径,或通过bat批处理命令运行,效果与直接打开一致。
C#使用System.Diagnostics.Process.Start()方法启动
(调用方路径:E:test)
Process.GetCurrentProcess().MainModule.FileName | D:test程序启动路径.exe |
Environment.CurrentDirectory | E:test |
Directory.GetCurrentDirectory() | E:test |
AppDomain.CurrentDomain.BaseDirectory | D:test |
Application.StartupPath | D:test |
Application.ExecutablePath | D:test程序启动路径.exe |
AppDomain.CurrentDomain.SetupInformation.ApplicationBase | D:test |
this.GetType().Assembly.Location | D:test程序启动路径.exe |
通过cmd命令行启动
(cmd命令中直接输入 D:test程序启动路径.exe)
Process.GetCurrentProcess().MainModule.FileName | D:test程序启动路径.exe |
Environment.CurrentDirectory | C:Users用户名 |
Directory.GetCurrentDirectory() | C:Users用户名 |
AppDomain.CurrentDomain.BaseDirectory | D:test |
Application.StartupPath | D:test |
Application.ExecutablePath | D:test程序启动路径.exe |
AppDomain.CurrentDomain.SetupInformation.ApplicationBase | D:test |
this.GetType().Assembly.Location | D:test程序启动路径.exe |
通过LabVIEW中“执行系统命令”(System Exec.vi)启动
Process.GetCurrentProcess().MainModule.FileName | D:test程序启动路径.exe |
Environment.CurrentDirectory | C:WINDOWSsystem32 |
Directory.GetCurrentDirectory() | C:WINDOWSsystem32 |
AppDomain.CurrentDomain.BaseDirectory | D:test |
Application.StartupPath | D:test |
Application.ExecutablePath | D:test程序启动路径.exe |
AppDomain.CurrentDomain.SetupInformation.ApplicationBase | D:test |
this.GetType().Assembly.Location | D:test程序启动路径.exe |
此方法在不同电脑中表现不一致,没有对比是操作系统原因还是LabVIEW原因。
在同事电脑上,Environment.CurrentDirectory和Directory.GetCurrentDirectory()方式获取的路径为C:Users用户名Desktop
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持阿里西西。