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

 更新时间:2023年07月14日 08:37:49   作者:高富帅军  
这篇文章主要介绍了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

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • c#中多线程访问winform控件的若干问题小结

    c#中多线程访问winform控件的若干问题小结

    大部分情况下都会碰到使用多线程控制界面上控件信息的问题。然而我们并不能用传统方法来解决这个问题,下面我将详细的介绍
    2013-10-10
  • C# Newtonsoft.Json 解析多嵌套json 进行反序列化的实例

    C# Newtonsoft.Json 解析多嵌套json 进行反序列化的实例

    这篇文章主要介绍了C# Newtonsoft.Json 解析多嵌套json 进行反序列化的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • 深入IComparable与IComparer的排序实例详解

    深入IComparable与IComparer的排序实例详解

    本篇文章是对IComparable与IComparer的排序实例进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • 关于C#继承的简单应用代码分析

    关于C#继承的简单应用代码分析

    在本篇文章里小编给大家整理了一篇关于C#继承的简单应用代码分析内容,有兴趣的朋友们可以学习下。
    2021-05-05
  • ASP.NET C#中Application的用法教程

    ASP.NET C#中Application的用法教程

    这篇文章主要给大家介绍了关于ASP.NET C#中Application的用法,在介绍Application的用法之前,先给大家介绍了Session的用法供大家参考学习,文中介绍的非常详细,需要的朋友们下面跟着小编一起来学习学习吧。
    2017-05-05
  • C#操作mysql数据库的代码实例

    C#操作mysql数据库的代码实例

    这篇文章为大家提供了一个C#操作mysql数据库的实例,大家可以参考使用
    2013-11-11
  • C#获取文件相关信息的方法

    C#获取文件相关信息的方法

    这篇文章主要介绍了C#获取文件相关信息的方法,涉及C#中FileInfo类的相关使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-04-04
  • C#中使用Cache框架快速实现Cache操作

    C#中使用Cache框架快速实现Cache操作

    这篇文章介绍了C#中使用Cache框架快速实现Cache操作的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • C#实现Stripe支付的方法实践

    C#实现Stripe支付的方法实践

    本文主要介绍了C#实现Stripe支付的方法实践,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • c#正反序列化XML文件示例(xml序列化)

    c#正反序列化XML文件示例(xml序列化)

    这篇文章主要介绍了c#正反序列化XML文件示例,可以将对象序列化为XML文本或者文件,或者将XML文件或文本反序列化为对象,要求进行序列化的对象不能出现序列化异常,支持类的嵌套,要求类的属性为public
    2014-03-03

最新评论