现象 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]呢?
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/ |
2
ysc3839 2022-08-29 05:55:27 +08:00 via Android 1
目前 Electron 似乎不能实现真正的单 exe 文件,盲猜 draw.io 的便捷版是通过自解压依赖文件实现的。所以你遇到的问题就能解释了,某次自解压时出错了或者被杀毒软件删掉了。
网上修复 DLL 缺失的方法绝大多数都是复制粘贴的,完全不考虑正确性。也不应该从别的软件中复制同名 DLL ,因为内容可能完全不同。FFmpeg 是开放源代码软件,开发者可以很自由地进行修改,并不能看见同名就认为是兼容的。 要知道一个程序运行时加载了什么 DLL ,可以用系统自带的资源监视器,或者 Process Explorer 。 |
3
Mithril 2022-08-29 09:34:45 +08:00 1
试了一下,它本身是个 7z 的自解压文件,运行的时候就会自动解压到 AppData\Local\Temp 里。
本身就是 Electron ,自己带了个 ffmpeg.dll 你可以清理一下 temp 文件夹试试,它自带的 ffmpeg 也没签名,按理说这个不会被杀软干掉的。 按理说它是不会调用同目录下的 ffmpeg 的,毕竟运行的实际上是解压出来的那个,而不是这个 no-installer |
4
7RTDKSAK OP |