如何从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
相关产品推荐
相关产品推荐

