如何在 WINE 中覆盖 dll(不使用 winecfg gui)?

如何在 WINE 中覆盖 dll(不使用 winecfg gui)?

我的 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命令行将您的winecfgdll 设置恢复为默认值:

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 列表

相关内容