refactored master func: wine_run

This commit is contained in:
Mikhail Tergoev
2025-10-17 13:55:55 +03:00
parent 3ee499c758
commit da3d5cd7af

View File

@@ -101,25 +101,6 @@ else
check_variables DXVK_NVAPI_LOG_LEVEL "none" check_variables DXVK_NVAPI_LOG_LEVEL "none"
fi fi
if [[ $WINEDEBUG != "-all" ]] ; then
init_log_file() {
local executable_name
executable_name=$(basename "${@: -1}" 2>/dev/null)
if [[ -n "$executable_name" ]]; then
local log_dir="$HOME/winehelper_backup_log"
mkdir -p "$log_dir"
export LOG_FILE="$log_dir/${executable_name%.*}.log"
date > "$LOG_FILE"
print_warning "Включен режим логирования работы WINE."
print_warning "Лог будет сохранен по пути: $LOG_FILE"
else
print_warning "Не удалось определить имя программы для создания лога."
print_warning "Логирование будет отключено."
fi
}
fi
##### WINETRICKS VERSION ##### ##### WINETRICKS VERSION #####
WINETRICKS_VERSION="20250102" WINETRICKS_VERSION="20250102"
@@ -1361,23 +1342,25 @@ kill_wine () {
} }
init_database () { init_database () {
WHDB_FILE="0" local whdb_file="0"
if [[ -f "$WIN_FILE_EXEC" ]] ; then if [[ -n "$WIN_FILE_EXEC" ]] \
&& [[ -f "$WIN_FILE_EXEC" ]]
then
WHDB="$(basename "$WIN_FILE_EXEC" .exe)" WHDB="$(basename "$WIN_FILE_EXEC" .exe)"
if [[ -f "$WIN_FILE_EXEC".whdb ]] ; then if [[ -f "$WIN_FILE_EXEC".whdb ]] ; then
WHDB_FILE="$WIN_FILE_EXEC".whdb whdb_file="$WIN_FILE_EXEC".whdb
else else
orig_IFS="$IFS" && IFS=$'\n' orig_IFS="$IFS" && IFS=$'\n'
if WH_FIND_DB_FILE="$(grep -ilw "#$WHDB.exe" "$WH_DB_DIR"/* )" ; then if WH_FIND_DB_FILE="$(grep -ilw "#$WHDB.exe" "$WH_DB_DIR"/* )" ; then
WHDB_FILE="$WH_FIND_DB_FILE" whdb_file="$WH_FIND_DB_FILE"
fi fi
IFS="$orig_IFS" IFS="$orig_IFS"
fi fi
fi fi
if [[ "$WHDB_FILE" != "0" ]] ; then if [[ "$whdb_file" != "0" ]] ; then
print_info "Используется файл настроек: $WHDB_FILE" print_info "Используется файл настроек: $whdb_file"
. "$WHDB_FILE" . "$whdb_file"
fi fi
if check_prefix_var && [[ -f "$WINEPREFIX/last.conf" ]] ; then if check_prefix_var && [[ -f "$WINEPREFIX/last.conf" ]] ; then
@@ -1403,26 +1386,56 @@ prepair_wine () {
} }
wine_run () { wine_run () {
if [[ $WINEARCH == "win32" ]] \ local wh_add_args win_file_exec
&& [[ -f "$WIN_FILE_EXEC" ]] \
&& file "$WIN_FILE_EXEC" | grep -q "x86-64"
then fatal "Нельзя запустить 64-битное приложение в 32-битном префиксе!"
fi
WIN_FILE_PATH="$(dirname "$WIN_FILE_EXEC")" if [[ $1 =~ (winecfg|regedit|winefile|wineconsole) ]] ; then
[[ -d "$WIN_FILE_PATH" ]] && cd "$WIN_FILE_PATH" win_file_exec="$1"
win_file_name="$win_file_exec"
wh_add_args=""
elif [[ -f "$1" ]] ; then
local win_file_path win_file_name
win_file_exec="$(readlink -f "$1")"
win_file_path="$(dirname "$win_file_exec")"
win_file_name="$(basename "$win_file_exec")"
[[ $WINEDEBUG != "-all" ]] && init_log_file "$@" case "${win_file_name,,}" in
*.exe) wh_add_args="$WINE_WIN_START" ;;
*.msi) wh_add_args="msiexec /i" ;;
*.bat|*.cmd) wh_add_args="" ;;
*) fatal "Не удалось запустить файл $1. Проверьте расширение файла." ;;
esac
if [[ -n $LOG_FILE ]] && [[ -f "$LOG_FILE" ]] ; then if [[ $WINEARCH == "win32" ]] \
echo "##### Основные переменные #####" | tee -a "$LOG_FILE" && file "$win_file_exec" | grep -q "x86-64"
env | grep -e "WH_" -e "WINE" -e "DXVK" -e "VKD3D" | tee -a "$LOG_FILE" then fatal "Нельзя запустить 64-битное приложение в 32-битном префиксе!"
fi
echo "##### Лог WINE #####" | tee -a "$LOG_FILE" cd "$win_file_path"
$MANGOHUD_RUN "$WINELOADER" "$@" $LAUNCH_PARAMETERS 2>&1 | tee -a "$LOG_FILE"
else else
$MANGOHUD_RUN "$WINELOADER" "$@" $LAUNCH_PARAMETERS fatal "Команда введена не правильно или не найден исполняемый файл $1"
fi fi
shift
if [[ $WINEDEBUG != "-all" ]] ; then
local log_dir log_file
log_dir="$HOME/winehelper_backup_log"
log_file="$log_dir/${PREFIX_NAME}_${win_file_name%.*}.log"
create_new_dir "$log_dir"
date > "$log_file"
print_warning "Включен режим логирования работы WINE."
print_warning "Лог будет сохранен по пути: $log_file"
echo "##### Основные переменные #####" | tee -a "$log_file"
env | grep -e "WH_" -e "WINE" -e "DXVK" -e "VKD3D" | tee -a "$log_file"
echo "##### Лог WINE #####" | tee -a "$log_file"
$MANGOHUD_RUN "$WINELOADER" $wh_add_args "$win_file_exec" "$@" $LAUNCH_PARAMETERS 2>&1 | tee -a "$log_file"
else
$MANGOHUD_RUN "$WINELOADER" $wh_add_args "$win_file_exec" "$@" $LAUNCH_PARAMETERS
fi
wait_wineserver wait_wineserver
} }
@@ -1431,14 +1444,11 @@ wine_run_install () {
if [[ "$INSTALL_MODE" == "manual" ]] if [[ "$INSTALL_MODE" == "manual" ]]
then print_warning "Рекомендуется не менять пути для установки приложения!" then print_warning "Рекомендуется не менять пути для установки приложения!"
fi fi
[[ ! -f "$1" ]] && fatal "Нет файла для установки: $1"
case "${1,,}" in if [[ ! -f "$1" ]] ;
*.exe) wine_run $WINE_WIN_START "$@" ;; then fatal "Нет файла для установки: $1"
*.msi) wine_run msiexec /i "$@" ;; else wine_run "$@"
*.bat|*.cmd) wine_run "$@" ;; fi
*) fatal "Не удалось запустить файл $1. Проверьте расширение файла." ;;
esac
wait_wineserver
} }
run_autoinstall () { run_autoinstall () {
@@ -2167,20 +2177,21 @@ select_component_version() {
} }
run_install_to_prefix() { run_install_to_prefix() {
export WINEPREFIX="$1" if [[ -z "$1" ]] || [[ -z "$2" ]] || [[ -f "$2" ]]; then
local WIN_FILE_EXEC="$2"
if [[ -z "$WINEPREFIX" ]] || [[ -z "$WIN_FILE_EXEC" ]]; then
fatal "Использование: $SCRIPT_NAME install-to-prefix <имя_префикса> <путь_к_установщику>" fatal "Использование: $SCRIPT_NAME install-to-prefix <имя_префикса> <путь_к_установщику>"
fi fi
export WINEPREFIX="$1"
shift
check_prefix_var check_prefix_var
prepair_wine prepair_wine
wine_run_install "$WIN_FILE_EXEC" wine_run "$@"
} }
run_install_dxvk() { run_install_dxvk() {
local version="$1" local version="$1"
if [[ -z "$version" ]] ; then if [[ -z "$version" ]] ; then
version=$(select_component_version "DXVK") version=$(select_component_version "DXVK")
[[ $? -ne 0 ]] && print_info "Установка DXVK отменена." && return [[ $? -ne 0 ]] && print_info "Установка DXVK отменена." && return
@@ -2188,21 +2199,27 @@ run_install_dxvk() {
list_component_versions "DXVK" list_component_versions "DXVK"
return return
fi fi
check_prefix_var check_prefix_var
init_database init_database
export DXVK_VER="$version" export DXVK_VER="$version"
init_wine_ver init_wine_ver
init_wineprefix init_wineprefix
if [[ "$DXVK_VER" == "none" ]] if [[ "$DXVK_VER" == "none" ]]
then print_info "Удаление DXVK..." then print_info "Удаление DXVK..."
else print_info "Установка DXVK: $DXVK_VER" else print_info "Установка DXVK: $DXVK_VER"
fi fi
init_dxvk "$DXVK_VER" init_dxvk "$DXVK_VER"
wait_wineserver wait_wineserver
} }
run_install_vkd3d() { run_install_vkd3d() {
local version="$1" local version="$1"
if [[ -z "$version" ]] ; then if [[ -z "$version" ]] ; then
version=$(select_component_version "VKD3D") version=$(select_component_version "VKD3D")
[[ $? -ne 0 ]] && print_info "Установка VKD3D отменена." && return [[ $? -ne 0 ]] && print_info "Установка VKD3D отменена." && return
@@ -2210,15 +2227,20 @@ run_install_vkd3d() {
list_component_versions "VKD3D" list_component_versions "VKD3D"
return return
fi fi
check_prefix_var check_prefix_var
init_database init_database
export VKD3D_VER="$version" export VKD3D_VER="$version"
init_wine_ver init_wine_ver
init_wineprefix init_wineprefix
if [[ "$VKD3D_VER" == "none" ]] if [[ "$VKD3D_VER" == "none" ]]
then print_info "Удаление VKD3D..." then print_info "Удаление VKD3D..."
else print_info "Установка VKD3D: $VKD3D_VER" else print_info "Установка VKD3D: $VKD3D_VER"
fi fi
init_vkd3d "$VKD3D_VER" init_vkd3d "$VKD3D_VER"
wait_wineserver wait_wineserver
} }
@@ -2237,9 +2259,7 @@ run_change_wine_version() {
fi fi
init_wine_ver init_wine_ver
init_wineprefix init_wineprefix
wait_wineserver wait_wineserver
print_ok "Версия Wine для префикса $PREFIX_NAME успешно изменена на $WH_WINE_USE." print_ok "Версия Wine для префикса $PREFIX_NAME успешно изменена на $WH_WINE_USE."
} }
@@ -2325,7 +2345,6 @@ case "$arg1" in
WIN_FILE_EXEC="$(readlink -f "$arg1")" WIN_FILE_EXEC="$(readlink -f "$arg1")"
WIN_FILE_NAME="$(basename "$WIN_FILE_EXEC")" WIN_FILE_NAME="$(basename "$WIN_FILE_EXEC")"
find_prefix "$WIN_FILE_EXEC" find_prefix "$WIN_FILE_EXEC"
prepair_wine prepair_wine
if [[ -n "$1" ]] && [[ -f "$1" ]] ; then if [[ -n "$1" ]] && [[ -f "$1" ]] ; then
@@ -2333,12 +2352,7 @@ case "$arg1" in
shift shift
fi fi
case "${WIN_FILE_NAME,,}" in wine_run "$WIN_FILE_EXEC" "$@" "$WIN_OPEN_FILE"
*.exe) wine_run $WINE_WIN_START "$WIN_FILE_EXEC" "$@" "$WIN_OPEN_FILE" ;;
*.msi) wine_run msiexec /i "$WIN_FILE_EXEC" "$@" "$WIN_OPEN_FILE" ;;
*.bat|*.cmd) wine_run start "$WIN_FILE_EXEC" "$@" "$WIN_OPEN_FILE" ;;
*) fatal "Тип файла не поддерживается." ;;
esac
else else
print_error "Команды $arg1 не существует." print_error "Команды $arg1 не существует."
wh_info wh_info