前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >四种方法获取可执行程序的文件路径(.NET Core / .NET Framework)

四种方法获取可执行程序的文件路径(.NET Core / .NET Framework)

作者头像
walterlv
发布于 2020-02-10 08:05:22
发布于 2020-02-10 08:05:22
7.1K00
代码可运行
举报
运行总次数:0
代码可运行

本文介绍四种不同的获取可执行程序文件路径的方法。适用于 .NET Core 以及 .NET Framework。


使用程序集信息获取

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var executablePath = Assembly.GetEntryAssembly().Location;

这种方式的思路是获取入口程序集所在的路径。不过 Assembly.GetEntryAssembly() 能获取到的程序集是入口托管程序集;使用此方法会返回第一个托管程序集。

只有 .NET Framework 程序的入口才是托管程序(exe)。而对于 .NET Core 程序,如果直接发布成带环境依赖声明的 dll,那么实际运行的进程是 dotnet.exe;而如果发布成自包含的 exe 程序,其主 exe 也是一个非托管的 CLR 启动器而已,并不是托管程序集。

所以此方法适用条件:

  1. 必须是 .NET Framework 程序(.NET Core 程序不适用)

使用应用程序域信息获取

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var executablePath = AppDomain.CurrentDomain.SetupInformation.ApplicationBase;

这种方式的思路是获取当前 AppDomain 所在的文件夹。不过此方法也只是获取到文件夹而已,不包含文件名。

所以此方法适用条件:

  1. 你不需要知道文件名,只是要一个程序所在的文件夹而已。

当然,此方法因为不涉及到托管和非托管程序集,所以与编译结果无关,适用于 .NET Core 和 .NET Framework 程序。

使用进程信息获取

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var executablePath = Process.GetCurrentProcess().MainModule.FileName;

这种方式的思路是获取当前进程可执行程序的完全路径。

对于 .NET Framework 程序,其 exe 就是这个路径。

对于 .NET Core 程序来说:

  1. 如果发布成带环境依赖声明的 dll,那么此方法获取到的可执行程序名将是 dotnet.exe,这显然不会是我们预期的行为;
  2. 如果发布成自包含的 exe,那么此方法获取到的可执行程序名就是程序自己的名称,这是期望的结果。

所以此方法适用条件:

  1. 适用于 .NET Framework 程序;
  2. 适用于发布成自包含的 .NET Core 程序。

使用命令行参数获取

我在另一篇博客中提到命令行参数中包含应用程序路径:

于是我们也可以通过命令行参数来获取到可执行程序的路径。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var executablePath = Environment.GetCommandLineArgs()[0];

这种方法的效果和前面使用进程信息获取的效果是相同的,会获取到相同的可执行程序路径。

总结靠谱的方法

通过以上方法的说明,我们可以知道目前没有 100% 可靠的获取当前可执行程序文件路径的方法,不过可以组合多种方法达到 100% 可靠的目的。

  1. 如果我们只需要获取程序所在的文件夹
    • 那么请直接使用 AppDomain.CurrentDomain.SetupInformation.ApplicationBase
  2. 如果我们需要获取到可执行程序的完整路径
    • 先通过进程或者命令行参数的方式获取
      • Process.GetCurrentProcess().MainModule.FileName
      • Environment.GetCommandLineArgs()[0]
    • 如果得到的进程是 dotnet.exe,那么再通过程序集信息获取
      • Assembly.GetEntryAssembly().Location

另外,关于以上方法的性能对比,你可以参阅林德熙的博客:dotnet 获取路径各种方法的性能对比

本文会经常更新,请阅读原文: https://blog.walterlv.com/post/get-current-executable-file-path.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。

本作品采用 知识共享署名-非商业性使用-相同
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-03-03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
前端vue中文件下载的几种方式
第一种方式是前端创建超链接,通过a标签的链接向后端服务发get请求,接收后端的文件流,非常简单:
全栈程序员站长
2022/09/14
6120
📃前端导出Excel实践:探索xlsl的实现方式
使用XLSX库,你可以读取现有的Excel文件,提取其中的数据和元数据。例如,假设你有一个名为"data.xlsx"的Excel文件,你可以通过以下方式读取它:
linwu
2023/07/27
1.3K0
前端下载二进制流文件
平时在前端下载文件有两种方式,一种是后台提供一个 URL,然后用 window.open(URL) 下载,另一种就是后台直接返回文件的二进制内容,然后前端转化一下再下载。
谭光志
2020/09/28
3.2K0
electron中 对于下载资源,断网检测实现方案
以为这样就可以解决了,但是又没有完全解决,测试断网后,又出现了一个其他问题,下载的资源是一个变成txt 文件,也就是一些错误信息。原本这样也是OK,但是提出一个要求,需要提示用户断网了
yaogengzhu
2023/12/11
4120
【黄啊码】PHP结合vue导出excel乱码
一般有设置charset基本在前端就没啥问题,问题就在于vue导出时就出现乱码了,有可能是这个,大多数网友的解决方案就是在请求里边加上参数:responseType: 'blob', // 表明返回服务器返回的数据类型,但这里我已经提前申明返回的数据是正常的,这时候又会咋样呢?
黄啊码
2023/03/06
3.6K0
【黄啊码】PHP结合vue导出excel乱码
Vue项目:js模拟点击a标签下载文件并重命名,URL文件地址下载方法、请求接口下载文件方法总结。
URL文件地址下载方法 一、正常情况下,我们都如此下载文件并修改文件名,在a标签上面添加download属性
江一铭
2022/06/17
7.2K0
Vue项目:js模拟点击a标签下载文件并重命名,URL文件地址下载方法、请求接口下载文件方法总结。
JS 通过 URL 下载文件并重命名(两种方式)
訾博ZiBo
2025/01/06
1.7K0
使用a标签下载文件
HTML中  <a>  元素(或称锚元素)可以通过它的 href 属性创建通向其他网页、文件、电子邮件地址、同一页面内的位置或任何其他 URL 的超链接。
can4hou6joeng4
2023/11/16
1.9K0
前端实现将二进制文件流,并下载为excel文件
二进制文件可以包含任意类型的数据,例如:图像、音频、视频、可执行文件、压缩文件等,而文本文件则仅仅包含 ASCII 码或其他编码的字符数据。
用户4396583
2024/08/22
1.2K0
利用puppeteer 库采集豆瓣音频代码示例
今天要给大家分享的采集代码,主要是使用 puppeteer 库进行编写的,用于采集豆瓣网相关音频。这段代码也是非常地简单实用,一起来看看吧。
华科云商小彭
2023/10/24
2540
利用puppeteer 库采集豆瓣音频代码示例
vue如何下载后台返回的zip和excel?
我只会写Bug啊
2023/12/25
3600
NPlayer 支持移动、平板、桌面,高度可定制的弹幕视频播放器
NPlayer 是一个高度可定制、支持移动端、功能强大的弹幕视频播放器。你可以自定义所有图标、主题色和每个控制项的位置,并且提供了内置组件方便二次开发。你可以自定义任意多个断点,不仅仅是兼容移动端,只要愿意,你可以非常轻松的兼容手机竖屏、手机横屏、平板等设备。弹幕系统是通过插件形式提供,使用时按需引入即可,弹幕系统支持非常多的设置,并且不限制后端实现,可以非常轻松就可以接入。NPlayer 还支持 IE 11,SSR,任何流媒体,直播等等。
羽月
2022/10/09
3.9K0
NPlayer 支持移动、平板、桌面,高度可定制的弹幕视频播放器
Blob 文件流下载 type类型
let url = window.URL.createObjectURL(new Blob([文件流(一般为res.data)], { type: 'Blob类型' })) let link = document.creatElement('a') // 创建a标签来下载 link.style.display = 'none' link.href = url link.setAttribute('download', '下载的文件名') document.body.appendChild(link) lin
李维亮
2022/12/31
2.1K0
bug 回忆录(一)
@author Ken @time 2020-09-24 22:00:55 @description 转载请备注出处,谢谢
公众号---人生代码
2020/09/30
8480
excel文件下载demo案例
实际项目中excel文件下载是一个非常常见的功能,对于这个部分功能来做一个整理 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.17</version> </dependency> 后端代码 @GetMapping("/exportExcel") @ApiOperation("可根
在水一方
2022/06/14
9430
纯js实现文件下载并重命名功能
直接记录代码: /** * 获取 blob * @param {String} url 目标文件地址 * @return {cb} */ function getBlob(url,cb) { var xhr = new XMLHttpRequest(); xhr.open('GET', url, true); xhr.responseType = 'blob'; xhr.onload = function() {
用户1141560
2019/05/24
11.9K2
前端如何实现将多页数据合并导出到Excel单Sheet页解决方案|内附代码
前后端分离是当前比较盛行的开发模式,它使项目的分工更加明确,后端负责处理、存储数据;前端负责显示数据.前端和后端开发人员通过接口进行数据的交换。因此前端最重要的能力是需要将数据呈现给用户后,与终端用户进行交互。
葡萄城控件
2023/02/24
1.2K0
前端如何实现将多页数据合并导出到Excel单Sheet页解决方案|内附代码
excel 导出json_导出的数据格式不对
但是用这种方式会出现一种问题,就是当你的table有分页的情况下,只能抓取当前分页的数据。
全栈程序员站长
2022/09/20
1.4K0
excel 导出json_导出的数据格式不对
前端内存泄漏详解
我们知道了JS对内存管理是自动的,并没特殊的机制去实现。那么为什么有时候会出现内存泄漏的情况呢?主要原因在于应用程序分配内存之后,由于程序设计错误,导致无法对分配的内存进行管理,无法垃圾回收(GC)、释放内存,情况严重则会导致系统卡死。内存泄漏就是未能释放不在使用的内存。
can4hou6joeng4
2023/11/29
2630
前端下载文件并设置文件名字
data 是接口地址 if (!data) { return; } let blob = new Blob([data], { type: "application/vnd.openxmlformats-officedocument.wordprocessingml.document;charset=utf-8" }); let url = window.URL.createObjectURL(blob
用户4344670
2020/05/26
3K0
推荐阅读
相关推荐
前端vue中文件下载的几种方式
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档