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

我在winecfg中弄坏了东西。 因此,它将不再运行任何葡萄酒中的Windows应用程序。 (我负担不起mv .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 

首先,尝试在命令行上使用winetrickswinetricks dll设置恢复为默认值:

 winetricks alldlls=default 

如果这不能解决问题,可以使用WINEDLLOVERRIDES; 它是一个环境变量,可以与wine一起使用来指定您想要(或不需要)的dll覆盖。 正如联机帮助页上所述,WINEDLLOVERRIDES

定义任何dll的加载过程中使用的dll的覆盖类型和加载顺序。 目前有两种类型的库可以加载到进程的地址空间:本机windows dlls(本机),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你的计划。 您还可以在启动wine计划的bash脚本中指定环境变量。

有关更多信息,请参阅man wine , 在线Ubuntu联机帮助页以及有用的葡萄酒常见问题解答 。