Como adicionar dll-override à configuração do wine a partir da linha de comando?

1
  1. Eu sei que posso adicionar substituições de dll da GUI wineconfig:

    WINEPREFIX="$somedir" winecfg
    
  2. Eu sei que posso temporariamente adicionar substituições de dll a partir da linha de comando, especificando a variável de ambiente WINEDLLOVERRIDES :

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

    Mas isso não alterará as configurações do vinho, apenas use temporariamente as configurações alteradas.

Eu quero alterar a configuração do wine (especificamente: add dll-override) da linha de comando.

Existe uma ferramenta de linha de comando que me ajudará a fazer isso?

    
por Sasha 09.04.2014 / 10:57

1 resposta

1

Este é o código exceprt que faz o que você quer, a partir de uma ferramenta que você quer analisar: winetricks :

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
}

Essa função bash cria primeiro um arquivo override-dll.reg no diretório temp e, em seguida, tenta importá-lo para o prefixo selecionado usando regedit . Você pode especificar substituições como:

w_override_dlls native,builtin comctl32

Outra função útil define a substituição para uma aplicação específica, como:

w_override_app_dlls winecfg.exe builtin comctl32

O que você pode fazer é escrever o seu próprio script bash usando isto como inspiração, ou estender a própria funcionalidade do winetricks (google para escrever metadados de verbos winetricks) para os seus casos de uso, ou apenas usar funções winetricks como biblioteca.

    
por 09.04.2014 / 11:49