@@ -177,7 +177,7 @@ fi
##### CHECK NOEXEC FOR /HOME #####
if mount -l | grep -E "[[:space:]]/home[[:space:]]" | grep -q "noexec" ; then
fatal "/home примонтирован в /etc/fstab с аргументом noexec.\nЗ а пу с к портативной версии wine не возможен из домашнего каталога."
fatal "/home примонтирован в /etc/fstab с аргументом noexec.\nЗ а пу с к портативной версии wine невозможен из домашнего каталога."
fi
##### ROOT #####
@@ -190,7 +190,7 @@ su_run () {
((i++))
done
else
pkexec "$@" && return 0
pkexec bash -c "$@" && return 0
fi
fatal "Н е удалось установить необходимые компоненты!"
}
@@ -259,13 +259,13 @@ try_copy_dir () {
try_force_link_file () {
if [[ ! -f "$1" ]] ; then
print_warning "нет файла для создания символьн ой ссылки: $1"
print_warning "нет файла для создания символическ ой ссылки: $1"
if [[ -f "$2" ]] ; then
try_remove_file "$2"
print_warning "удаляем символьн ую ссылку: $2"
print_warning "удаляем символическ ую ссылку: $2"
fi
return 1
elif [[ -z "$2" ]] ; then fatal "нет пути для создания символьн ой ссылки на файл $1"
elif [[ -z "$2" ]] ; then fatal "нет пути для создания символическ ой ссылки на файл $1"
else
try_remove_file "$2"
ln -s -f -r "$1" "$2"
@@ -275,11 +275,11 @@ try_force_link_file () {
}
try_force_link_dir () {
if [[ ! -d "$1" ]] ; then print_info "каталога $1 не существует для создания символьн ой сссылки"
elif [[ -z "$2" ]] ; then fatal "не указан путь для создания символьн ой ссылки на каталог $1"
if [[ ! -d "$1" ]] ; then print_info "каталога $1 не существует для создания символическ ой сссылки"
elif [[ -z "$2" ]] ; then fatal "не указан путь для создания символическ ой ссылки на каталог $1"
else
ln -s -f -r "$1" "$2"
[[ "$?" != 0 ]] && print_error "не удалось сделать символьн ую ссылку на каталог $1 по пути $2" || return 0
[[ "$?" != 0 ]] && print_error "не удалось сделать символическ ую ссылку на каталог $1 по пути $2" || return 0
fi
return 1
}
@@ -328,7 +328,7 @@ try_get_page () {
|| grep -q "Forbidden" "$OUT_PAGE_TMP"
then
try_remove_file "$OUT_PAGE_TMP"
fatal "Страница сайта $1 не доступна, или превышено количество запросов к странице."
fatal "Страница сайта $1 не доступна или превышено количество запросов к странице."
else
return 0
fi
@@ -509,63 +509,41 @@ var_ld_library_path_update () {
return 0
}
extract_icon () {
check_prefix_var
local exe_file="$1"
local ico_name="$(basename "$exe_file" .exe).ico"
local png_name="$(basename "$exe_file" .exe).png "
local tmp_ico_dir="$WH_TMP_DIR/icons"
local user_icons="$WINEPREFIX/icons "
create_new_dir "$tmp_ico_dir"
if ! wrestool -x -t 14 "$exe_file" -o "$tmp_ico_dir/$ico_name" ; then
print_warning "Н е удалось извлечь иконку из $exe_file"
try_remove_file "$tmp_ico_dir"
return 1
find_prefix () {
# Автоматическое определение префикса, если он не задан
if [[ -z "$WINEPREFIX" ]] && [[ "$1" == "$WH_PREFIXES_DIR"* ]]; then
local extracted_prefix
extracted_prefix="$(echo "$1" | grep -o ".*/prefixes/[^/]*") "
if [[ -d "$extracted_prefix" ]]; then
export WINEPREFIX="$extracted_prefix "
print_info "Префикс автоматически определен: $(basename "$WINEPREFIX")"
fi
fi
if ! icotool -x -i 1 "$tmp_ico_dir/$ico_name" -o "$tmp_ico_dir/$png_name" ; then
print_warning "Н е удалось извлечь иконку из $ico_name"
try_remove_file "$tmp_ico_dir"
return 1
fi
create_new_dir "$user_icons"
if ! try_copy_file "$tmp_ico_dir/$png_name" "$user_icons" ; then
print_warning "Н е удалось копировать иконку в префикс"
try_remove_file "$user_icons"
return 1
fi
try_remove_dir "$tmp_ico_dir"
print_ok "Иконка сохранена: $user_icons/$png_name"
return 0
}
create_desktop () {
local name_desktop exe_file desktop_filename icon_file desktop_path
local name_desktop exe_file desktop_filename icon_file desktop_path icon_arg desktop_filename_arg
name_desktop="$1"
exe_file="$2"
if [[ -n $4 ]] && [[ $4 != "nocopy" ]];
then desktop_filename="$4"
else desktop_filename="$(basename "$exe_file" .exe | sed "s| |_|")"
fi
if [[ "$RESTORE_FROM_BACKUP" == "1" ]] && [[ -f "$3" ]]
then icon_file="$3 "
elif [[ -f "$WH_IMAGE_PATH/$3.png" ]]
then icon_file="$WH_IMAGE_PATH/$3.png "
else icon_file="wine"
icon_arg="$3"
desktop_filename_arg ="$4"
# Определяем имя desktop-файла
if [[ -n "$desktop_filename_arg" ]] && [[ "$desktop_filename_arg" != "nocopy" ]]; then
desktop_filename="$desktop_filename_arg "
else
desktop_filename="$(basename "$exe_file" .exe | sed "s| |_|g") "
fi
# Проверяем обязательные аргументы и наличие exe-файла
if [[ -z "$name_desktop" ]] || [[ -z "$exe_file" ]] ; then
fatal "Used: $SCRIPT_NAME --desktop \"desktop_name\" \"path_to_exe\" \"name_png_from_image\" "
fatal "Использование: $0 desktop \"Имя ярлыка\" \"/путь/к/файлу.exe\" [иконка|auto] [имя_desktop_фа йла ] "
elif [[ ! -f "$exe_file" ]] ; then
print_warning "Для создания ярлыка не найден исполняемый файл: $exe_file"
BASENAME_EXE="$(basename "$exe_file")"
local BASENAME_EXE="$(basename "$exe_file")"
print_info "Запускаем поиск $BASENAME_EXE"
local FIND_PATH
if [[ -z "$DRIVE_C" ]] || [[ ! -d "$DRIVE_C" ]]
then FIND_PATH="$WH_PREFIXES_DIR"
else FIND_PATH="$DRIVE_C"
@@ -575,11 +553,57 @@ create_desktop () {
-iname "$BASENAME_EXE")"
if [[ -z "$exe_file" ]] || [[ ! -f "$exe_file" ]]
then fatal "Для создания ярлыка не найден исполняемый файл: $BASENAME_EXE"
else print_ok "Исполняемый файл $BASENAME_EXE найден по пути $(dirname "$exe_file")/"
else print_ok "Исполняемый файл $BASENAME_EXE найден по пути: $(dirname "$exe_file")/"
fi
fi
# создаем .desktop файл
find_prefix "$exe_file"
# --- Логика обработки иконки ---
local user_icons_dir="$WINEPREFIX/icons"
create_new_dir "$user_icons_dir"
# Случай 1: Восстановление из бэкапа (передан явный путь)
if [[ "$RESTORE_FROM_BACKUP" == "1" ]] && [[ -f "$icon_arg" ]]; then
icon_file="$icon_arg"
# Случай 2: 'auto' или пустой аргумент - пытаемся извлечь из EXE
elif [[ -z "$icon_arg" ]] || [[ "$icon_arg" == "auto" ]]; then
print_info "Попытка извлечь иконку из $exe_file..."
local png_name="$(basename "$exe_file" .exe).png"
local extracted_icon_path="$user_icons_dir/$png_name"
# Проверяем, существует ли иконка, чтобы избежать повторного извлечения
if [[ -f "$extracted_icon_path" ]]; then
print_info "Иконка уже существует: $extracted_icon_path"
icon_file="$extracted_icon_path"
else
local tmp_ico_dir="$WH_TMP_DIR/icons_$$" # Используем PID для временного каталога
create_new_dir "$tmp_ico_dir"
local ico_name="$(basename "$exe_file" .exe).ico"
if wrestool -x -t 14 "$exe_file" -o "$tmp_ico_dir/$ico_name" &>/dev/null && \
icotool -x -i 1 "$tmp_ico_dir/$ico_name" -o "$tmp_ico_dir/$png_name" &>/dev/null && \
try_copy_file "$tmp_ico_dir/$png_name" "$user_icons_dir/"; then
icon_file="$extracted_icon_path"
print_ok "Иконка успешно извлечена и сохранена: $icon_file"
else
print_warning "Н е удалось извлечь иконку из $exe_file. Используется иконка по умолчанию."
icon_file="wine" # Запасной вариант
fi
try_remove_dir "$tmp_ico_dir"
fi
# Случай 3: Передано конкретное имя иконки
elif [[ -f "$WH_IMAGE_PATH/$icon_arg.png" ]]; then
icon_file="$WH_IMAGE_PATH/$icon_arg.png"
# Случай 4: Запасной вариант по умолчанию
else
print_info "Иконка '$icon_arg' не найдена. Используется иконка по умолчанию."
icon_file="wine"
fi
# --- Конец логики обработки иконки ---
# Создаем .desktop файл
create_new_dir "$WH_MENU_DIR"
{
echo "[Desktop Entry]"
@@ -596,19 +620,29 @@ create_desktop () {
cp -f "$USER_WORK_PATH/$desktop_filename.desktop" "$WH_MENU_DIR/"
if [[ "$RESTORE_FROM_BACKUP" == "1" ]] ; then
print_info "Пропускаем обновление desktop.list (режим восстановления из бэкапа )"
print_info "Пропускаем обновление desktop.list (режим восстановления)"
else
# д обавляем информацию о приложении в "$WINEPREFIX/desktop.list"
# Д обавляем информацию о приложении в "$WINEPREFIX/desktop.list"
if [[ -f "$WINEPREFIX/desktop.list" ]] \
&& grep -qe "^${name_desktop}=" "$WINEPREFIX/desktop.list"
then sed -i "/^$name_desktop=/d" "$WINEPREFIX/desktop.list"
fi
create_new_dir "$WINEPREFIX/icons"
try_copy_file "$icon_file" "$WINEPREFIX/icons/"
echo "$name_desktop=${exe_file//$WINEPREFIX/}=$(basename "$icon_file")" >> "$WINEPREFIX/desktop.list"
# Копируем финальную иконку в директорию иконок префикса, если е е там нет
local final_icon_name
if [[ -f "$icon_file" ]]; then
final_icon_name=$(basename "$icon_file")
if [[ ! -f "$user_icons_dir/$final_icon_name" ]]; then
try_copy_file "$icon_file" "$user_icons_dir/"
fi
else
final_icon_name="$icon_file" # например, "wine"
fi
echo "$name_desktop=${exe_file//$WINEPREFIX/}=${final_icon_name}" >> "$WINEPREFIX/desktop.list"
fi
# с оздаем файл категории для меню
# С оздаем файл категории для меню
create_new_dir "$HOME/.local/share/desktop-directories"
if [[ ! -f "$WH_MENU_CATEGORY" ]] ; then
cat > "$WH_MENU_CATEGORY" <<EOF
@@ -619,7 +653,7 @@ Icon=wine
EOF
fi
# Создаем файл меню для всех приложений
# Создаем файл меню для всех приложений WineHelper
create_new_dir "$HOME/.config/menus/applications-merged"
if [[ ! -f "$WH_MENU_CONFIG" ]] ; then
cat > "$WH_MENU_CONFIG" <<EOF
@@ -638,15 +672,15 @@ EOF
EOF
fi
# Обновляем кэш desktop файлов
# Обновляем кэш desktop- файлов
update-desktop-database "$HOME/.local/share/applications"
if [[ $4 != "nocopy" ]] ; then
if [[ "$desktop_filename_arg" != "nocopy" ]] ; then
desktop_path="$(xdg-user-dir DESKTOP)"
print_info "В меню и на рабочем столе создан $desktop_filename.desktop"
print_info "В меню и на рабочем столе создан ярлык: $desktop_filename.desktop"
cp -f "$USER_WORK_PATH/$desktop_filename.desktop" "$desktop_path"
else
print_info "В меню создан $desktop_filename.desktop"
print_info "В меню создан ярлык: $desktop_filename.desktop"
fi
if [[ -n "$INSTALL_SCRIPT_NAME" ]] \
@@ -742,9 +776,10 @@ init_wined3d () {
init_dxvk () {
check_variables USE_DXVK_VER "$1"
get_dxvk () {
DXVK_URL="$1"
DXVK_PACKAGE="${WH_VULKAN_LIBDIR}/dxvk-${DXVK_VAR_VER}.tar.$(echo ${DXVK_URL#*.tar.}) "
get_dxvk() {
local DXVK_URL="$1"
local DXVK_VAR_VER="$2 "
local DXVK_PACKAGE="${WH_VULKAN_LIBDIR}/${DXVK_VAR_VER}.tar.$(echo "${DXVK_URL#*.tar.}")"
if try_download "$DXVK_URL" "$DXVK_PACKAGE" check256sum \
&& unpack "$DXVK_PACKAGE" "$WH_VULKAN_LIBDIR"
then
@@ -755,8 +790,8 @@ init_dxvk () {
}
for DXVK_VAR_VER in "$USE_DXVK_VER" $@ ; do
if [[ ! -d "${WH_VULKAN_LIBDIR}/dxvk- $DXVK_VAR_VER" ]] ; then
get_dxvk "$CLOUD_URL/dxvk- ${DXVK_VAR_VER}.tar.xz"
if [[ ! -d "${WH_VULKAN_LIBDIR}/${ DXVK_VAR_VER} " ]] ; then
get_dxvk "$CLOUD_URL/${DXVK_VAR_VER}.tar.xz" "$DXVK_VAR_VER"
fi
done
@@ -769,8 +804,8 @@ init_dxvk () {
fi
for dxvkfiles in $DXVK_FILES ; do
try_copy_other_dll_to_pfx_64 "${WH_VULKAN_LIBDIR}/dxvk- $USE_DXVK_VER/x64/$dxvkfiles.dll"
if try_copy_other_dll_to_pfx_32 "${WH_VULKAN_LIBDIR}/dxvk- $USE_DXVK_VER/x32/$dxvkfiles.dll"
try_copy_other_dll_to_pfx_64 "${WH_VULKAN_LIBDIR}/${ USE_DXVK_VER} /x64/$dxvkfiles.dll"
if try_copy_other_dll_to_pfx_32 "${WH_VULKAN_LIBDIR}/${ USE_DXVK_VER} /x32/$dxvkfiles.dll"
then var_winedlloverride_update "$dxvkfiles=n"
fi
done
@@ -779,9 +814,10 @@ init_dxvk () {
init_vkd3d () {
check_variables USE_VKD3D_VER "$1"
get_vkd3d () {
VKD3D_URL="$1"
VKD3D_PACKAGE="${WH_VULKAN_LIBDIR}/vkd3d-proton-${VKD3D_VAR_VER}.tar.$(echo ${VKD3D_URL#*.tar.}) "
get_vkd3d() {
local VKD3D_URL="$1"
local VKD3D_VAR_VER="$2 "
local VKD3D_PACKAGE="${WH_VULKAN_LIBDIR}/${VKD3D_VAR_VER}.tar.$(echo "${VKD3D_URL#*.tar.}")"
if try_download "$VKD3D_URL" "$VKD3D_PACKAGE" check256sum \
&& unpack "$VKD3D_PACKAGE" "$WH_VULKAN_LIBDIR"
then
@@ -792,15 +828,15 @@ init_vkd3d () {
}
for VKD3D_VAR_VER in "$USE_VKD3D_VER" $@ ; do
if [[ ! -d "${WH_VULKAN_LIBDIR}/vkd3d-proton- $VKD3D_VAR_VER" ]] ; then
get_vkd3d "$CLOUD_URL/vkd3d-proton- ${VKD3D_VAR_VER}.tar.xz"
if [[ ! -d "${WH_VULKAN_LIBDIR}/${ VKD3D_VAR_VER} " ]] ; then
get_vkd3d "$CLOUD_URL/${VKD3D_VAR_VER}.tar.xz" "$VKD3D_VAR_VER"
fi
done
VKD3D_FILES="d3d12 d3d12core libvkd3d-shader-1 libvkd3d-1" # libvkd3d-proton-utils-3
for vkd3dfiles in $VKD3D_FILES ; do
try_copy_other_dll_to_pfx_64 "${WH_VULKAN_LIBDIR}/vkd3d-proton- $USE_VKD3D_VER/x64/$vkd3dfiles.dll"
if try_copy_other_dll_to_pfx_32 "${WH_VULKAN_LIBDIR}/vkd3d-proton- $USE_VKD3D_VER/x86/$vkd3dfiles.dll"
try_copy_other_dll_to_pfx_64 "${WH_VULKAN_LIBDIR}/${ USE_VKD3D_VER} /x64/$vkd3dfiles.dll"
if try_copy_other_dll_to_pfx_32 "${WH_VULKAN_LIBDIR}/${ USE_VKD3D_VER} /x86/$vkd3dfiles.dll"
then var_winedlloverride_update "$vkd3dfiles=n"
fi
done
@@ -1074,7 +1110,7 @@ init_wineprefix () {
if [[ ! -f "$WINEPREFIX/.firstboot" ]] ; then
create_new_dir "$WINEPREFIX"
if [[ "$CLEAR_PREFIX" == "1" ]]
then print_warning "Используется переменная \"CLEAR_PREFIX=1\" что принудительно создает чистый префикс с установкой компонентов с помощью winetricks."
then print_warning "Используется переменная \"CLEAR_PREFIX=1\", которая принудительно создает чистый префикс с установкой компонентов с помощью winetricks."
elif [[ "$BASE_PFX" != "none" ]]
then get_base_pfx "$BASE_PFX"
fi
@@ -1165,7 +1201,7 @@ init_wineprefix () {
for ext in $WH_XDG_OPEN ; do
get_and_set_reg_file --add "Software\Classes\.$ext" '@=' 'REG_SZ' "xdg-open" "system"
done
print_info "Используе тся ассоциации с нативными приложениями для файлов: \"$WH_XDG_OPEN\""
print_info "Использую тся ассоциации с нативными приложениями для файлов: \"$WH_XDG_OPEN\""
else
# удаление команды xdg-open из реестра
get_and_set_reg_file --delete "$XDG_OPEN_REG" '@='
@@ -1193,7 +1229,7 @@ init_wineprefix () {
"${cpcsp_proxy_cmd[@]}" | tee "$WINEPREFIX/cpcsp_setup.log"
local CPCSP_EXIT_STATUS="${PIPESTATUS[0]}"
if grep -q "failed to load /opt/cprocsp/" "$WINEPREFIX/cpcsp_setup.log" ; then
fatal "Проверьте правильность установки CryptoPro в системе.\n Инструкция: https://www.altlinux.org/CryptoPro"
fatal "Проверьте правильность установки КриптоПро в системе.\n Инструкция: https://www.altlinux.org/CryptoPro"
fi
if [[ $CPCSP_EXIT_STATUS == "0" ]] ; then
@@ -1535,9 +1571,7 @@ select_wine_version() {
group_versions+=("$version_name")
fi
else # win32
if [[ "$version_name" =~ i[3-6]86 ]]; then
group_versions+=("$version_name")
fi
group_versions+=("$version_name")
fi
fi
done < "$sha256_file"
@@ -1717,7 +1751,7 @@ remove_winehelper () {
echo " Это удалит:"
echo " - В с е настройки WineHelper"
echo " - В с е приложения/программы, установленные через WineHelper"
echo " - В с е ярлыки из меню и с рабочего стола созданные с помощью WineHelper"
echo " - В с е ярлыки из меню и с рабочего стола, созданные с помощью WineHelper"
echo "======================================================"
if print_confirmation "Продолжить?" ; then
echo "----------------------------------------------"
@@ -1979,6 +2013,164 @@ restore_prefix() {
return 0
}
update_last_conf_var() {
local var_name="$1"
local new_value="$2"
local conf_file="$WINEPREFIX/last.conf"
if [[ ! -f "$conf_file" ]] ; then
print_warning "Файл last.conf не найден, не могу обновить переменную $var_name."
return 1
fi
if grep -q "export $var_name=" "$conf_file"; then
sed -i "s|^export $var_name=.*|export $var_name=\"$new_value\"|" "$conf_file"
else
echo "export $var_name=\"$new_value\"" >> "$conf_file"
fi
}
list_component_versions() {
local component_group="$1"
local sha256_file="$DATA_PATH/sha256sum.list"
[[ ! -f "$sha256_file" ]] && fatal "Файл с версиями не найден: $sha256_file"
print_info "Доступные версии для $component_group:"
awk -v group="$component_group" '
/^#+\s*([^#]+?)\s*#*$/ {
current_group = $0
gsub(/^#+\s*|\s*#*$/, "", current_group)
}
/^[a-f0-9]{64}/ {
if (current_group == group) {
filename = $2
sub(/\.tar\.xz$/, "", filename)
print " - " filename
}
}
' "$sha256_file" | sort -Vr
}
select_component_version() {
local component_group="$1"
local sha256_file="$DATA_PATH/sha256sum.list"
[[ ! -f "$sha256_file" ]] && fatal "Файл с версиями не найден: $sha256_file"
local versions=()
local current_group=""
while IFS= read -r line; do
if [[ "$line" =~ ^#+[[:space:]]([^#[:space:]]+)[[:space:]]#* ]] ; then
current_group="${BASH_REMATCH[1]}"
elif [[ "$current_group" == "$component_group" ]] && [[ "$line" =~ [a-f0-9]{64} ]] ; then
local filename
filename=$(echo "$line" | awk '{print $2}')
local version_name=${filename%.tar.xz}
versions+=("$version_name")
fi
done < "$sha256_file"
IFS=$'\n' versions=($(sort -Vr <<<"${versions[*]}"))
unset IFS
if [[ ${#versions[@]} -eq 0 ]] ; then
print_warning "Н е найдено доступных версий для $component_group." >&2
return 1
fi
print_info "Выберите версию $component_group для установки:" >&2
echo >&2
local items_to_print=(" 0) Отмена")
for i in "${!versions[@]}" ; do
items_to_print+=(" $((i+1))) ${versions[$i]}")
done
local num_items=${#items_to_print[@]}
local term_width=${COLUMNS:-80}
local max_len=0
for item in "${items_to_print[@]}" ; do
(( ${#item} > max_len )) && max_len=${#item}
done
((max_len+=2))
local num_cols=$(( term_width / max_len ))
(( num_cols = num_cols > 0 ? num_cols : 1 ))
local num_rows=$(( (num_items + num_cols - 1) / num_cols ))
for ((i=0; i<num_rows; i++)) ; do
for ((j=0; j<num_cols; j++)) ; do
local index=$(( i + j * num_rows ))
(( index < num_items )) && printf "%-*s" "$max_len" "${items_to_print[index]}" >&2
done
echo >&2
done
local max_choice=${#versions[@]}
local user_choice
while true; do
echo >&2
read -p "Введите номер (0-$max_choice): " user_choice
if [[ "$user_choice" =~ ^[0-9]+$ ]] && (( user_choice >= 0 && user_choice <= max_choice )) ; then
if [[ "$user_choice" == "0" ]] ; then
return 1
fi
echo "${versions[$((user_choice-1))]}"
return 0
else
print_error "Неверный выбор. Введите число от 0 до $max_choice." >&2
fi
done
}
run_install_dxvk() {
local version="$1"
if [[ -z "$version" ]] ; then
version=$(select_component_version "DXVK")
[[ $? -ne 0 ]] && print_info "Установка DXVK отменена." && return
elif [[ "$version" == "list" ]]; then
list_component_versions "DXVK"
return
fi
check_prefix_var
init_database
init_wine_ver
init_wineprefix
if [[ "$version" == "none" ]] ; then
print_info "Удаление DXVK..."
init_wined3d
update_last_conf_var "DXVK_VER" ""
else
init_dxvk "$version"
update_last_conf_var "DXVK_VER" "$USE_DXVK_VER"
fi
wait_wineserver
}
run_install_vkd3d() {
local version="$1"
if [[ -z "$version" ]] ; then
version=$(select_component_version "VKD3D")
[[ $? -ne 0 ]] && print_info "Установка VKD3D отменена." && return
elif [[ "$version" == "list" ]] ; then
list_component_versions "VKD3D"
return
fi
check_prefix_var
init_database
init_wine_ver
init_wineprefix
if [[ "$version" == "none" ]] ; then
print_info "Удаление VKD3D..."
init_wined3d
update_last_conf_var "VKD3D_VER" ""
else
init_vkd3d "$version"
update_last_conf_var "VKD3D_VER" "$USE_VKD3D_VER"
fi
wait_wineserver
}
wh_info () {
echo "Использование: $SCRIPT_NAME [команда]
@@ -1987,6 +2179,9 @@ wh_info () {
install [скрипт] запустить скрипт установки программы
install [скрипт] --clear-pfx не использовать готовый префикс для установки ПО
install-dxvk [версия|none|list] установить, удалить или показать версии DXVK
install-vkd3d [версия|none|list] установить, удалить или показать версии VKD3D
installed список установленных программ
run [программа] запуск программы (отладка)
remove-all удалить WineHelper и все связанные данные
@@ -2034,6 +2229,8 @@ case "$arg1" in
winetricks) prepair_wine ; "$WH_WINETRICKS" -q "$@" ;;
desktop) create_desktop "$@" ; exit 0 ;;
install|-i) run_autoinstall "$@" ;;
install-dxvk) run_install_dxvk "$@" ;;
install-vkd3d) run_install_vkd3d "$@" ;;
installed) check_installed_programs "$1" ;;
run|-r) run_installed_programs "$1" ;;
backup-prefix) backup_prefix "$@" ;;
@@ -2046,7 +2243,8 @@ case "$arg1" in
*)
if [[ -f "$arg1" ]] ; then
WIN_FILE_EXEC="$(readlink -f "$arg1")"
WIN_FILE_NAME="$(basename "$arg1 ")"
WIN_FILE_NAME="$(basename "$WIN_FILE_EXEC ")"
find_prefix "$WIN_FILE_EXEC"
case "${WIN_FILE_NAME,,}" in
*.exe) prepair_wine ; wine_run $WINE_WIN_START "$WIN_FILE_EXEC" "$@" ;;
*.msi) prepair_wine ; wine_run msiexec /i "$WIN_FILE_EXEC" "$@" ;;