如何在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
首先,尝试在命令行上使用winetricks
将winetricks
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联机帮助页以及有用的葡萄酒常见问题解答 。