You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB.Net单文件发布后Application.StartupPath返回临时目录问题咨询

单文件发布后获取应用实际启动目录的解决方案

.NET 5+ 发布为压缩单文件时,运行时会默认将所有依赖解压到%TEMP%下的随机子目录后执行,因此Application.StartupPath、Application.ExecutablePath返回的都是临时解压目录路径,而非原始exe所在的目录。

方案1:通过进程主模块路径获取(全.NET版本兼容)

直接读取当前进程的主模块路径,即为用户启动的原始exe的完整路径,提取父目录即可得到所需的启动文件夹路径:

using System.Diagnostics;
using System.IO;

// 获取原始exe的完整路径
string exeFullPath = Process.GetCurrentProcess().MainModule.FileName;
// 提取exe所在的文件夹路径
string actualStartupFolder = Path.GetDirectoryName(exeFullPath);

方案2:.NET 6及以上版本简化写法

.NET 6 新增了Environment.ProcessPath属性,无需额外引入命名空间即可直接获取进程主模块路径:

using System.IO;

string exeFullPath = Environment.ProcessPath;
string actualStartupFolder = Path.GetDirectoryName(exeFullPath);

方案3:修改发布配置,禁用临时解压逻辑

如果需要让原生的Application.StartupPath属性返回正确路径,可以在项目的.csproj文件中加入如下配置,关闭运行时解压到临时目录的逻辑:

<PropertyGroup>
  <PublishSingleFile>true</PublishSingleFile>
  <SelfContained>true</SelfContained>
  <!-- 禁止运行时将单文件内容全量解压到临时目录 -->
  <ExtractAllOnRun>false</ExtractAllOnRun>
</PropertyGroup>

注意:该方案存在兼容限制,若项目引用了第三方非托管动态库,可能出现运行时加载失败的问题,优先推荐使用前两种无需修改发布配置的方案。

内容的提问来源于stack exchange,提问作者Jeremy Child

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 08:51:01