首页 > 编程语言 >C# 获取程序路径的几种方法及其区别

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

时间:2023-09-06 12:33:06浏览次数:35  
标签:exe 启动 C# 路径 程序 几种 CurrentDomain test

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

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

1 string str1=Process.GetCurrentProcess().MainModule.FileName;//获取模块的完整路径。
2 string str2=Environment.CurrentDirectory;//获取或设置当前工作目录的完全限定路径。
3 string str3=Directory.GetCurrentDirectory();//获取应用程序的当前工作目录。
4 string str4=AppDomain.CurrentDomain.BaseDirectory;//获取基目录,它由程序集冲突解决程序用来探测程序集。
5 string str5=Application.StartupPath;//获取启动了应用程序的可执行文件的路径,不包括可执行文件的名称。
6 string str6=Application.ExecutablePath;//获取启动了应用程序的可执行文件的路径,包括可执行文件的名称。
7 string str7=AppDomain.CurrentDomain.SetupInformation.ApplicationBase;//获取或设置包含该应用程序的目录的名称。
8 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:\WINDOWS\system32
Directory.GetCurrentDirectory() C:\WINDOWS\system32
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
————————————————
本文转自CSDN博主「高富帅军」原文链接:https://blog.csdn.net/u011353510/article/details/122240674

标签:exe,启动,C#,路径,程序,几种,CurrentDomain,test
From: https://www.cnblogs.com/soliang/p/17682004.html

相关文章

  • Android官方资料--Block-Based OTAs
    Block-BasedOTAsINTHISDOCUMENTRecommendationsFilevs.BlockOTAsUpdatingunmodifiedsystemsUpdatingmodifiedsystemsYoucanenableblock-basedover-the-air(OTA)updatesfornewdevicesrunningAndroid5.0.OTAisthemechanismbywhichOEMsremote......
  • 无涯教程-JavaScript - ISOWEEKNUM函数
    描述ISOWEEKNUM函数返回给定日期的年份的ISO周编号。语法ISOWEEKNUM(date)争论Argument描述Required/OptionalDateDateisthedate-timecodeusedbyExcelfordateandtimecalculation.RequiredNotesMicrosoftExcel将日期存储为连续数字,因此可以在计算......
  • 华为S7706交换机设置 DHCP
    1.登陆S7706核心交换机后1.建立新的VLANvlan156vlan1572.为VLAN156VLAN157分别设置DHCP的POOL(也就是需要分配的地址)ippoolvlan156gateway-list10.10.156.1network10.10.156.0mask255.255.255.0excluded-ip-address10.10.156.210.10.156.50excluded-ip-ad......
  • CloudQuery ✖️ PolarDB:让数据库管理更简单
    近日,CloudQuery数据操作管控平台与阿里云PolarDB数据库管理软件,完成产品集成认证测试。也在以下功能上完善了用户使用PolarDB的体验,使数据库的管理更加安全高效。1.支持在CloudQuery中创建连接,便于进行数据库管控。2.支持编辑连接、资源纳管、连接池管理以及连接设置,可设置......
  • spring boot logback日志显示时间差8小时
    参考:https://blog.csdn.net/u014453475/article/details/100579856官方文档:Thesecondparameterspecifiesatimezone.Forexample,the'%date{HH:mm:ss.SSS,Australia/Perth}wouldprintthetimeinthetimezoneofPerth,Australia,theworld'smostiso......
  • CMake生成Visual Studio工程
    CMake–生成VisualStudio工程C/C++项目经常使用CMake构建工具。CMake项目文件(例如CMakeLists.txt)可以直接由VisualStudio使用。本文要说明的是如何将CMake项目转换到VisualStudio解决方案(.sln)或项目(.vcxproj)开发环境为了生成VisualStudio解决方案,必须安装以下内......
  • Elasticsearch7.8集群实践记录之下线节点
    1.背景:由于机房迁移需要将elasticsearch集群进行跨机房搬迁,采取先扩容再收缩的方式进行,已有效减小对业务环境的影响。当前需要将老的节点有序下线。2.操作步骤:  1.检查集群配置,保证主节点的可用性;   #设置minimum_master_nodes为2curl-XPUT'http://hostname:9......
  • 在 Linux 系统中安装并设置 kubectl
    准备开始kubectl版本和集群版本之间的差异必须在一个小版本号内。例如:v1.28版本的客户端能与v1.27、v1.28和v1.29版本的控制面通信。用最新兼容版的kubectl有助于避免不可预见的问题。在Linux系统中安装kubectl在Linux系统中安装kubectl有如下几种方法:用c......
  • Elasticsearch7.8集群实践记录
    1.背景:当需要开发团队搭建自有elasticsearch集群时候,需要先明确具体的应用场景,进而对可用性,性能以及容量进行评估。当前实践记录主要应用场景在于业务日志记录短暂保存以便提供近期数据查询,并选择elasticsearch版本7.8.0,可用性要求三个9,每日数据量月1.5T,数据保存大约1周;2.配置项......
  • java中如何用Scanner类读入单个字符
    Scanner没有直接读入单个字符的方法,next方法没办法读入空格符,因为Scanner以空格符作为输入完毕的标志importjava.util.Scanner;Scannerin=newScanner(System.in);Strings=in.nextLine();char[]chars=s.toArray();charc=chars[0];//c就是读入的单个字符......