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