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

如何从C#项目子文件夹中通过按钮点击启动.exe程序

用相对路径打开项目子文件夹中的.exe程序

作为C#新手,你遇到的绝对路径问题确实很常见——硬编码绝对路径在共享项目时肯定会出问题,因为每个人的文件结构都不一样。下面给你几个靠谱的解决方案,都是用相对路径+项目输出目录的思路,完美适配共享场景:

第一步:先配置你的exe文件属性

首先确保你的exe.exe放在项目的子文件夹里(比如你说的tools文件夹),然后在Visual Studio里右键这个exe文件,选择【属性】:

  • 把【复制到输出目录】设置为始终复制或者如果较新则复制
  • 这样每次编译项目时,这个tools文件夹和里面的exe都会被复制到输出目录(比如bin/Debug或者bin/Release),其他人拿到项目编译后也会有这个文件。

第二步:用代码构建正确的相对路径

根据你的项目类型,选下面的一种方式:

方式1:WinForms项目推荐用Application.StartupPath

需要先引用System.Windows.Forms程序集,然后写这段代码:

using System.Diagnostics;
using System.IO;
using System.Windows.Forms;

// 按钮点击事件里的代码
private void btnOpenExe_Click(object sender, EventArgs e)
{
    // 组合输出目录和相对路径
    string exeFullPath = Path.Combine(Application.StartupPath, @"tools\exe.exe");
    // 启动程序
    Process.Start(exeFullPath);
}

Application.StartupPath会直接获取你程序运行时的目录(就是bin/Debug这类),因为我们已经把tools文件夹复制到这里了,所以路径肯定是对的。

方式2:通用场景(WinForms/控制台/.NET Core)用AppDomain.CurrentDomain.BaseDirectory

这个方法不需要额外引用,兼容性更强:

using System.Diagnostics;
using System.IO;
using System;

private void btnOpenExe_Click(object sender, EventArgs e)
{
    string exeFullPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"tools\exe.exe");
    Process.Start(exeFullPath);
}

BaseDirectory是应用程序的基目录,默认就是输出目录的根,同样能找到复制过来的tools文件夹。

方式3:.NET Core/.NET 5+ 可选Directory.GetCurrentDirectory()

不过要注意,这个方法获取的是当前工作目录,如果程序运行时工作目录被修改(比如打开了文件对话框),可能会出错,所以优先级低于前两种:

string exeFullPath = Path.Combine(Directory.GetCurrentDirectory(), @"tools\exe.exe");
Process.Start(exeFullPath);

额外注意事项

  • 一定要用Path.Combine来拼接路径,它会自动处理不同系统的路径分隔符(虽然Windows是\,但跨平台时也能兼容),比直接拼接字符串靠谱多了。
  • 测试时可以先输出exeFullPath看看路径是否正确,比如用MessageBox.Show(exeFullPath),确保路径没问题再调用Process.Start。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 20:39:05