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

为何我的C#程序无法找到指定的*.exe文件?

为啥会报错?

兄弟,你踩了个典型的坑:嵌入到项目资源里的exe不是磁盘上的独立文件,Process.Start()要的是真实存在的磁盘文件路径,但你直接写"olderApp.exe"(系统会在当前程序目录找,可这文件根本不在那),或者写错语法的@"Properties.Resources.olderApp.exe"(这玩意儿根本不是路径,Properties.Resources.olderApp其实是个字节数组),系统当然找不到文件啦!

正确的操作方式

要运行这个嵌入的旧exe,得先把它从资源里“抠”出来存到磁盘上,再启动这个临时文件,给你写好代码了:

private void button1_Click(object sender, EventArgs e)
{
    // 第一步:找个临时位置存exe,比如系统临时文件夹
    string tempExePath = Path.Combine(Path.GetTempPath(), "olderApp.exe");

    // 第二步:把资源里的二进制数据写入临时文件
    File.WriteAllBytes(tempExePath, Properties.Resources.olderApp);

    // 第三步:启动这个临时文件
    ProcessStartInfo startInfo = new ProcessStartInfo();
    startInfo.FileName = tempExePath;
    try
    {
        var process = Process.Start(startInfo);
        // 可选:等旧程序退出后自动删除临时文件
        process.Exited += (s, args) => 
        {
            if (File.Exists(tempExePath))
            {
                try { File.Delete(tempExePath); } catch { }
            }
        };
        process.EnableRaisingEvents = true;
    }
    catch (Exception ex)
    {
        MessageBox.Show($"启动失败:{ex.Message}");
        // 启动失败时清理临时文件
        if (File.Exists(tempExePath))
        {
            File.Delete(tempExePath);
        }
    }
}
几个要注意的小细节
  • 确认资源名称:你在项目资源里加的exe,对应的资源名是olderApp(不带.exe后缀),所以代码里用Properties.Resources.olderApp才对,别瞎加后缀。
  • 权限问题:如果临时文件夹写不进去,换个路径试试,比如应用自己的Data目录:Path.Combine(Application.LocalUserAppDataPath, "olderApp.exe")。
  • 临时文件清理:上面代码里加了退出后删除的逻辑,要是怕删不掉(比如旧程序卡死),也可以不管,系统临时文件夹会自动清理,但还是尽量清理更优雅。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:58:32