![如何在 WINE 中覆盖 dll(不使用 winecfg gui)?](https://linux22.com/image/831193/%E5%A6%82%E4%BD%95%E5%9C%A8%20WINE%20%E4%B8%AD%E8%A6%86%E7%9B%96%20dll%EF%BC%88%E4%B8%8D%E4%BD%BF%E7%94%A8%20winecfg%20gui%EF%BC%89%EF%BC%9F.png)
我的 winecfg 中有些东西损坏了。因此,它不再能在 wine 中运行任何 Windows 应用程序。(我不能再将 .wine 复制到新目录中并重新安装)。
如何使用命令行覆盖 dll。我意外禁用了 rpcrt4.dll,想撤消它。
启动 winecfg 或任何 Windows 应用程序(例如 MS Word)时,Wine 会打印此错误消息:
err:module:import_dll Library rpcrt4.dll (which is needed by L"C:\\windows\\system32\\explorer.exe") not found
答案1
首先,尝试使用winetricks
命令行将您的winecfg
dll 设置恢复为默认值:
winetricks alldlls=default
如果这不能解决问题,您可以使用 WINEDLLOVERRIDES;它是一个环境变量,可以与wine
指定您想要(或不需要)的 dll 覆盖一起使用。如手册页, 葡萄酒之旅
定义在加载任何 dll 的过程中使用的 dll 的覆盖类型和加载顺序。目前有两种类型的库可以加载到进程的地址空间中:本机 windows dll(本机)、wine 内部 dll(内置)。类型可以用类型的第一个字母缩写(n、b)。库也可以被禁用('')。每个顺序序列必须用逗号分隔。
您可以导出环境变量,也可以使用env
并指定与 wine 命令一起使用的变量(如果您不指定 WINEPREFIX,它将使用默认值):
env WINEDLLOVERRIDES="rpcrt4=b,n" wine exe_to_run
这将指定应尝试内置版本,然后尝试本机版本。如果您改用"rpcrt4="
,则该 dll 将保持禁用状态,并且wine
根本不会运行。
如果要将值导出到该会话的 shell,可以运行
export WINEDLLOVERRIDES="rpcrt4=b,n"
这不会影响 中的设置winecfg
,它们将保持不变。此环境变量以及 中提供的许多其他有用变量wine
都是临时的,仅影响使用它们的 shell,方法是导出变量或env
每次使用 来声明变量,然后wine
在启动程序时使用该变量运行。您还可以在启动程序的 bash 脚本中指定环境变量wine
。
欲了解更多信息,请man wine
参阅Ubuntu 在线手册页,以及有用的葡萄酒常见问题解答。
答案2
我假设您可以通过 ~/wine/user.reg 来完成此操作,您应该在其中查看 [Software\Wine\DllOverrides] 下的 dll 列表