如何配置otvdm(winevdm)自动运行被调用的16位应用程序
64位Windows 10下自动调用otvdm运行16位程序适配Makefile的实现方法
方案一:全局注册otvdm为16位应用默认启动器(无需修改原有Makefile,一劳永逸)
这个方案最适配现有场景,配置完成后任何场景下调用16位exe都会自动走otvdm启动,全程无手动操作:
- 把otvdm压缩包解压到固定的纯英文路径,不要带中文、空格、特殊字符,推荐路径比如
C:\devtools\otvdm,避免后续调用出现路径识别错误。 - 进入otvdm解压目录,找到
install.bat文件,右键选择「以管理员身份运行」,脚本会自动写入注册表关联,把所有NE格式(16位)的可执行文件的默认处理程序绑定到otvdm。 - 如果执行完脚本后调用16位程序仍然弹出「选择打开方式」的窗口,是因为系统里残留了之前错误的exe文件关联,管理员身份打开命令提示符依次执行以下命令重置关联,之后重启资源管理器或重启电脑,再重新运行一次
install.bat即可:
assoc .exe=exefile ftype exefile="%1" %* reg delete "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.exe" /f
配置完成后直接运行你的Makefile即可,里面调用的所有F盘分散存储的16位程序都会被系统自动交给otvdm拉起,不需要任何手动选择操作。
方案二:不修改系统全局关联,适配Makefile的轻量变通方案
如果你不想改动系统全局的文件关联,怕影响其他程序的正常运行,可以直接修改Makefile的调用逻辑,不需要做系统级配置:
- 同样先把otvdm解压到固定的纯英文路径,比如
C:\devtools\otvdm\otvdm.exe。 - 在Makefile头部定义otvdm的路径变量,所有调用16位程序的命令前都加上这个变量前缀即可,示例写法:
# 配置otvdm路径,路径带空格的话要在外侧加双引号 OTVDM := C:/devtools/otvdm/otvdm.exe # 原有构建逻辑,把直接调用16位exe的命令套上OTVDM变量 all: target.bin target.bin: src.dat # 原命令为 F:/oldapps/pack16.exe src.dat target.bin $(OTVDM) F:/oldapps/pack16.exe src.dat target.bin $(OTVDM) F:/oldapps/link16.exe target.bin lib/oldlib.lib
如果Makefile里调用的16位程序数量极多,逐个修改命令太麻烦,可以写一个批量替换脚本,把所有匹配16位程序路径的行前面统一加上$(OTVDM) 前缀即可,配置完运行make的时候会自动给每个16位程序套上otvdm启动,也不会弹出手动选择的窗口。
注意事项
- 路径兼容性问题:所有涉及的路径(otvdm路径、16位程序存储路径、Makefile工作路径)尽量不要使用中文、空格、特殊符号,otvdm对非标准路径的兼容性一般,容易出现文件找不到、启动失败的问题。
- 依赖问题:如果启动16位程序时报缺少运行库dll,把对应16位版本的依赖dll放到目标exe的同目录下即可,otvdm会自动识别加载。
- 版本选择:不要下载缺少组件的精简版otvdm,要选择带完整
install.bat脚本的版本,否则全局关联会因为缺注册表项配置失败。
内容的提问来源于stack exchange,提问作者kadash12
相关产品推荐
相关产品推荐

