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

如何在C#中获取服务调用的可执行文件所在文件夹路径?

获取Windows服务可执行文件所在文件夹路径的C#方法

在Windows服务场景下,程序默认工作目录会指向System32,导致相对路径查找文件失败。以下两种方法可以准确获取服务可执行文件的所在文件夹:

方法1:通过入口程序集获取

利用Assembly.GetEntryAssembly()获取服务的入口程序集(即你的exe文件),再提取其所在目录:

using System.IO;
using System.Reflection;

// 获取入口程序集的路径
var entryAssembly = Assembly.GetEntryAssembly();
if (entryAssembly == null)
{
    // 服务场景下一般不会触发此异常,可根据需求添加处理逻辑
    throw new InvalidOperationException("无法获取入口程序集");
}

string exeFullPath = entryAssembly.Location;
string serviceFolder = Path.GetDirectoryName(exeFullPath);
// serviceFolder即为可执行文件所在的文件夹路径

这种方法直接关联服务的入口程序,不受工作目录影响,是服务场景下最可靠的方式之一。

方法2:通过当前进程主模块获取

通过Process.GetCurrentProcess()获取当前服务进程的主模块,进而拿到exe的实际路径:

using System.IO;
using System.Diagnostics;

// 获取当前进程的主模块路径
var currentProcess = Process.GetCurrentProcess();
string exeFullPath = currentProcess.MainModule.FileName;
string serviceFolder = Path.GetDirectoryName(exeFullPath);

该方法通过进程信息获取路径,同样能避开System32的工作目录干扰,适用于所有进程场景。

注意事项

  • 确保添加对应的命名空间引用(System.Reflection/System.Diagnostics/System.IO);
  • 两种方法在服务运行时均能返回正确的exe所在目录,不会被工作目录误导;
  • 拿到路径后,可将其与配置文件名拼接成完整路径,传递给需要的库即可解决文件查找问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 19:06:32