如何从命令行将 dll-override 添加到 wine 配置中?

如何从命令行将 dll-override 添加到 wine 配置中?
  1. 我知道我可以从 wineconfig GUI 添加 dll-overrides:

    WINEPREFIX="$somedir" winecfg
    
  2. 我知道我能暂时地WINEDLLOVERRIDES通过指定环境变量从命令行添加 dll-overrides :

    WINEPREFIX="$somedir" WINEDLLOVERRIDES="$somedlloverrides" wine "$pathtoexe"
    

    但这不会改变 wine 配置,只是暂时使用改变的设置。

我想从命令行更改 wine 配置(具体来说:添加 dll-override)。

是否有命令行工具可以帮助我做到这一点?

答案1

这是从您想要查看的工具中摘录的可以完成您想要的操作的代码:葡萄酒技巧

w_override_dlls()
{
    w_skip_windows w_override_dlls && return

    _W_mode=$1
    case $_W_mode in
    *=*)
        w_die "w_override_dlls: unknown mode $_W_mode.
Usage: 'w_override_dlls mode[,mode] dll ...'." ;;
    disabled)
        _W_mode="" ;;
    esac
    shift
    echo Using $_W_mode override for following DLLs: $@
    cat > "$W_TMP"/override-dll.reg <<_EOF_
REGEDIT4

[HKEY_CURRENT_USER\Software\Wine\DllOverrides]
_EOF_
    while test "$1" != ""
    do
        case "$1" in
        comctl32)
           rm -rf "$W_WINDIR_UNIX"/winsxs/manifests/x86_microsoft.windows.common-controls_6595b64144ccf1df_6.0.2600.2982_none_deadbeef.manifest
           ;;
        esac

        if [ "$_W_mode" = default ]
        then
            # To delete a registry key, give an unquoted dash as value
            echo "\"*$1\"=-" >> "$W_TMP"/override-dll.reg
        else
            # Note: if you want to override even DLLs loaded with an absolute
            # path, you need to add an asterisk:
            echo "\"*$1\"=\"$_W_mode\"" >> "$W_TMP"/override-dll.reg
            #echo "\"$1\"=\"$_W_mode\"" >> "$W_TMP"/override-dll.reg
        fi

        shift
    done

    w_try_regedit "$W_TMP_WIN"\\override-dll.reg

    unset _W_mode
}

此 bash 函数首先override-dll.reg在临时目录中创建一个文件,然后尝试使用 将其导入到选定的前缀中regedit。您可以指定覆盖,例如:

w_override_dlls native,builtin comctl32

另一个有用的功能是为特定应用程序设置覆盖,例如:

w_override_app_dlls winecfg.exe builtin comctl32

您可以做的是,以此为灵感编写自己的 bash 脚本,或者根据您的用例扩展 winetricks 自己的功能(使用 Google 编写 winetricks 动词元数据),或者只是将 winetricks 函数用作库。

相关内容