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

求助大家:由[draw.io-20.2.3-windows-no-installer.exe]缺失[ffmpeg.dll]所引发地一系列疑惑

  •  
  •   7RTDKSAK · 2022-08-29 00:05:01 +08:00 · 1236 次点击
    这是一个创建于 810 天前的主题,其中的信息可能已经有所发展或是发生改变。

    现象 1:
    1.我从 GITHUB 下载了[draw.io-20.2.3-windows-no-installer.exe],也就是便携版,双击即可运行
    2.用了几天,没啥问题,昨天晚上,启动时候提醒我"ffmpeg.dll 缺失,重新安装程序可能解决此问题"
    3.我一脸懵,这都用好几天了,怎么今天才突然说缺 DLL 呢?无头绪,一顿狂按回车键,居然又启动成功了?
    问题 1:
    程序[draw.io-20.2.3-windows-no-installer.exe]报告缺 DLL[ffmpeg.dll]后,
    疑问 A:用了好几天了没问题,怎么突然缺 DLL 了?其它程序删除了 DLL?
    疑问 B:可是我又没有给它补上 DLL,狂按一通回车键后,它又不缺 DLL 了?它自己连接网络后下载了?可惜现在又没有条件断网测试了(因为这一天一夜中它从来没有提示缺 DLL 了)

    现象 2:
    1.我搜索了一大堆解决方案,大意都差不多,让下载 ffmpeg.dll 后放到[c:\Windows\System32]和[c:\Windows\SysWOW64]中
    2.但是我不想下载这些来历不明地 DLL,想找一家来自大公司并且有数字签名地 ffmpeg.dll
    3.突然想到既然[draw.io-20.2.3-windows-no-installer.exe]能运行,那想必系统中已经有 ffmpeg.dll 了吧?于是全盘搜索,我滴乖乖,CLASH FOR WINDOWS/EDGE CORE/EDGE 标准版 /微信,大家的安装目录里都有 ffmpeg.dll,还有一些乱码目录里也有 ffmpeg.dll,全系统中竟然存在 62 个 ffmpeg.dll,但是[c:\Windows\System32]和[c:\Windows\SysWOW64]这俩目录中都没有 ffmpeg.dll
    问题 2:
    那么[draw.io-20.2.3-windows-no-installer.exe]此时(即正常运行时)到底调用了哪一个[ffmpeg.dll]呢?
    A:通用且默认地搜索 DLL 地位置---即[c:\Windows\System32]和[c:\Windows\SysWOW64]这俩目录下都不存在 ffmpeg.dll
    B:如果[draw.io-20.2.3-windows-no-installer.exe]和其它程序一样,自带了 ffmpeg.dll,那还能报告 ffmpeg.dll 缺失?
    C:难道[draw.io-20.2.3-windows-no-installer.exe]还能借用其它程序捆绑地 ffmpeg.dll 吗?不可能吧?

    现象 3:
    1.印象中 EXE 会优先调用同目录下地 DLL?于是我把[c:\Program Files (x86)\Microsoft\EdgeCore\104.0.1293.70\ffmpeg.dll]复制到了[draw.io-20.2.3-windows-no-installer.exe]同目录之下,因为这个 DLL 是有微软数字签名地
    2.之前用了几天,每次启动[draw.io-20.2.3-windows-no-installer.exe]的第一个实例的时候,都会弹一个窗,让选择是否新建绘图以及切换界面语言,然后才能进入绘图主工作区,以后新开地每一个实例则可以直接进入绘图主工作区
    3.当把[c:\Program Files (x86)\Microsoft\EdgeCore\104.0.1293.70\ffmpeg.dll]复制到[draw.io-20.2.3-windows-no-installer.exe]同目录之后,直接就进入绘图主工作区了,哪怕是第一个实例也不会出现切换界面语言地弹窗
    4.当删除[draw.io-20.2.3-windows-no-installer.exe]同目录下地 ffmpeg.dll 后,又会恢复到上述步骤 2 中所描述地行为
    5.结合步骤 3 和步骤 4,是不是可以断定[draw.io-20.2.3-windows-no-installer.exe]确实调用了同目录下地[ffmpeg.dll](自 c:\Program Files (x86)\Microsoft\EdgeCore\104.0.1293.70\ffmpeg.dll 复制而来)呢?

    所以请问大家,为什么会出现这些差异?
    在我狂按回车键之后[draw.io-20.2.3-windows-no-installer.exe]到底调用了哪一个[ffmpeg.dll]呢?

    5 条回复    2022-08-30 00:53:21 +08:00
    Osk
        1
    Osk  
       2022-08-29 00:39:19 +08:00   ❤️ 1
    原因不知道, 也没法帮忙试试看, 但这些信息希望有帮助:

    1. draw.io 个人认为客户端版本几乎没必要使用, 用 chrome 内核的浏览器几乎可以获得相同的体验, 或者将它安装为 pwa 也行.

    2. 盲猜这个客户端其实就是 electron 套壳, electron 由于有原生 API 可以调用, 比 web 会多一点点功能, 但核心的绘图功能估计几乎没区别.

    3. ffmpeg 提供多媒体, 尤其是音视频的分离与解码 /编码, 可能这个库在 electron 中不算核心部件, 所以能一堆报错但能运行.

    4. drawio web 版如果有暂存的绘图, 打开后不会询问放在哪里. 本地版就不清楚了, 也许你可以试试打开控制台看看.
    但你说 ffmpeg.dll 会影响此行为, 那估计 electron 运行时由于不合适的 ffmpeg.dll 出现问题了(常见的话, 比如版本不匹配等问题).


    建议: 重新下载安装包看看有无 ffmpeg, 或者下载历史版本的看看. 或者直接用 web 版, 安装为 pwa.

    --------------

    题外话: 不要啥都往 system32 或者 syswow64 扔, 网上这些教程真的是坑人, 这种关键位置是能乱放 dll 的吗... 像 ffmpeg 这种还好, 最坑的是 vc dll 都有人让人在网上随便下载的, 首先这种 dll 不是缺一个, 而是缺一套..其次...

    题外话: 讨厌 electron 应用的原因之一就是太笨重, 属于是我用我不用, 给别人用我就用. /doge/
    ysc3839
        2
    ysc3839  
       2022-08-29 05:55:27 +08:00 via Android   ❤️ 1
    目前 Electron 似乎不能实现真正的单 exe 文件,盲猜 draw.io 的便捷版是通过自解压依赖文件实现的。所以你遇到的问题就能解释了,某次自解压时出错了或者被杀毒软件删掉了。
    网上修复 DLL 缺失的方法绝大多数都是复制粘贴的,完全不考虑正确性。也不应该从别的软件中复制同名 DLL ,因为内容可能完全不同。FFmpeg 是开放源代码软件,开发者可以很自由地进行修改,并不能看见同名就认为是兼容的。
    要知道一个程序运行时加载了什么 DLL ,可以用系统自带的资源监视器,或者 Process Explorer 。
    Mithril
        3
    Mithril  
       2022-08-29 09:34:45 +08:00   ❤️ 1
    试了一下,它本身是个 7z 的自解压文件,运行的时候就会自动解压到 AppData\Local\Temp 里。
    本身就是 Electron ,自己带了个 ffmpeg.dll
    你可以清理一下 temp 文件夹试试,它自带的 ffmpeg 也没签名,按理说这个不会被杀软干掉的。
    按理说它是不会调用同目录下的 ffmpeg 的,毕竟运行的实际上是解压出来的那个,而不是这个 no-installer
    7RTDKSAK
        4
    7RTDKSAK  
    OP
       2022-08-29 12:46:01 +08:00
    @Osk
    1.使用客户端只是因为不想依赖网络
    2.确实就是 electron 套壳
    3.好,以后避免下载 DLL 这种操作


    @ysc3839
    @Mithril
    好,所以我还是下载[draw.io-20.2.3-windows-installer.exe]然后安装到某一个目录,这样比便携版更好是吧?
    Osk
        5
    Osk  
       2022-08-30 00:53:21 +08:00   ❤️ 1
    @7RTDKSAK draw.io 随便起个 http 文件服务器就能实现离线运行啦, 比应用 electron 还方便
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1221 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 18:22 · PVG 02:22 · LAX 10:22 · JFK 13:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.