V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Apol1oBelvedere
V2EX  ›  问与答

Win7 x64 运行程序显示“无法找到函数 GetFileVersionInfoExA,程序无法正常运行”,有无办法修复此错误?

  •  
  •   Apol1oBelvedere · 2023-01-01 18:39:16 +08:00 · 1087 次点击
    这是一个创建于 471 天前的主题,其中的信息可能已经有所发展或是发生改变。
    Win7 x64 运行程序显示“无法找到函数 GetFileVersionInfoExA,程序无法正常运行”,有无办法修复此错误?此程序需要在 Win7 x64 上使用。
    13 条回复    2023-01-01 21:19:00 +08:00
    ysc3839
        1
    ysc3839  
       2023-01-01 19:00:03 +08:00 via Android
    试试修复系统文件或者重装系统?
    GeruzoniAnsasu
        2
    GeruzoniAnsasu  
       2023-01-01 19:10:14 +08:00
    根据一个找到的表格: https://j00ru.vexillium.org/blog/win7_vs_win8/exports/KernelBase.dll.html

    GetFileVersionInfoExA 这个 API 在 win7 以上版本直接从 kernelbase.dll 导出
    而根据 MSDN 的文档: https://learn.microsoft.com/zh-cn/windows/win32/api/winver/nf-winver-getfileversioninfoexa
    这个 API 由 Api-ms-win-core-version-l1-1-0.dll 导出

    所以猜测是新版本环境链接了 kernelbase.dll 在 win7 上无法找到入口导致的。
    可以先试试能不能在程序目录下放一个同名 dll 转发一下 API 调用,如果不行的话尝试直接改导入表指向 win7 版本的 dll
    maolaohei
        3
    maolaohei  
       2023-01-01 19:11:51 +08:00 via Android
    你可以尝试安装一下 vc 运行库
    jimages
        4
    jimages  
       2023-01-01 19:19:21 +08:00
    开兼容模式了?
    Apol1oBelvedere
        5
    Apol1oBelvedere  
    OP
       2023-01-01 19:43:54 +08:00
    @ysc3839 已重装官方版 Win7 未起作用。
    @maolaohei 2008-2019 所有 x86 、x64 vc 运行库安装后未起作用。
    @jimages 开启兼容模式未起作用。
    @GeruzoniAnsasu 在程序目录下放一个同名 Api-ms-win-core-version-l1-1-0.dll 未起作用。
    GeruzoniAnsasu
        6
    GeruzoniAnsasu  
       2023-01-01 19:47:42 +08:00
    @Apol1oBelvedere 用 dependency walker (
    https://www.dependencywalker.com
    https://github.com/lucasg/Dependencies

    看一下,能看到缺少的 API 以及 dll 。

    如果导入 dll 的名字写了绝对路径,那么在同目录下同名 dll 就劫持不了。然后就算用同名劫持的办法你也必须保证提供一个有相同签名 API 的文件
    ysc3839
        7
    ysc3839  
       2023-01-01 19:50:09 +08:00 via Android
    @Apol1oBelvedere 给一下报错的完整截图?以及看看程序目录下有没有 version.dll ,有的话删除试试?
    Apol1oBelvedere
        8
    Apol1oBelvedere  
    OP
       2023-01-01 20:27:44 +08:00
    @ysc3839

    有 version.dll ,但是需要这个 dll 不能删除。
    ysc3839
        9
    ysc3839  
       2023-01-01 20:43:54 +08:00 via Android
    @Apol1oBelvedere 不可能不能删除,这个是系统自带的 DLL
    felixlong
        10
    felixlong  
       2023-01-01 20:49:57 +08:00
    换用老版本的 visual studio 编译试试。最新版的 visual studio 编译出的程序应该不支持 Win7 了。
    felixlong
        11
    felixlong  
       2023-01-01 21:04:11 +08:00
    如果要用最新的 visual studio 的话。 好像需要安装对应版本的 redistributable.
    “Installing the VS2019 redistributable”
    patrickyoung
        12
    patrickyoung  
       2023-01-01 21:15:35 +08:00 via iPhone
    这个大概率是新版本 vs 在 w10+版本编译出来不兼容了,重新获取一个发行包吧。如果是 Qt 写的应用,装个 Qt 试试。
    qscasdqwezxc
        13
    qscasdqwezxc  
       2023-01-01 21:19:00 +08:00 via Android
    修改导入表
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1232 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 18:09 · PVG 02:09 · LAX 11:09 · JFK 14:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.