Compare commits
24 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
151b6d6e30 | ||
|
c8049efd37 | ||
|
8eb5a0aa86 | ||
|
7edc205b66 | ||
|
b36cadd54d | ||
|
48d870979f | ||
|
cbe535b878 | ||
|
fd3442888d | ||
|
7321542477 | ||
|
477f44a11e | ||
|
4f9821450a | ||
|
f858746064 | ||
|
1123c018eb | ||
|
998eff3263 | ||
|
4aebb722ca | ||
|
4672dcd4e1 | ||
|
e174b034df | ||
|
3100475b1e | ||
|
148a7dbfce | ||
|
5c01220382 | ||
|
b74fe77bad | ||
|
3a442f6288 | ||
|
20030d43e4 | ||
|
b44849661d |
39
autoinstall/arm-kt-att
Normal file
39
autoinstall/arm-kt-att
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# info_ru: Программа “АРМ КТ ПРОФ АТТЕСТАТ” для документов об основном общем, среднем общем образовании.
|
||||||
|
########################################################################
|
||||||
|
export PROG_URL="https://armregistr.ru/programmnoe-obespechenie/licenziya-na-programmnoe-obespechenie-dlya-zapolneniya-blank-4"
|
||||||
|
export WH_WINE_USE="wine_x_tkg_10-0_amd64"
|
||||||
|
export WINEPREFIX="arm-kt"
|
||||||
|
export PROG_NAME="АРМ КТ ПРОФ АТТЕСТАТ"
|
||||||
|
export PROG_ICON="armkt"
|
||||||
|
export BASE_PFX="none"
|
||||||
|
export WINEARCH="win64"
|
||||||
|
export INSTALL_DLL=""
|
||||||
|
export WH_WINDOWS_VER="7"
|
||||||
|
|
||||||
|
AUTOINSTALL_URL=$(curl -s "$PROG_URL" | grep "setup.zip" | awk -F'"' '{print $2}')
|
||||||
|
SHORT_NAME=$(echo $AUTOINSTALL_URL | awk -F'/' '{print $5}')
|
||||||
|
VER_EXE=$(echo $AUTOINSTALL_URL | grep -o '[0-9]\+\.[0-9]\+\.[0-9]\+')
|
||||||
|
AUTOINSTALL_ZIP="${WH_TMP_DIR}/$SHORT_NAME-$VER_EXE-setup.zip"
|
||||||
|
AUTOINSTALL_EXE="${WH_TMP_DIR}/$SHORT_NAME-$VER_EXE-setup.exe"
|
||||||
|
|
||||||
|
if [[ -z $VER_EXE ]]
|
||||||
|
then fatal "Не удалось получить версию ПО со страницы на сайте!"
|
||||||
|
else print_info "Устанавливаем $PROG_NAME версии $VER_EXE"
|
||||||
|
fi
|
||||||
|
|
||||||
|
prepair_wine
|
||||||
|
|
||||||
|
if try_download "$AUTOINSTALL_URL" "$AUTOINSTALL_ZIP" ; then
|
||||||
|
unpack "$AUTOINSTALL_ZIP" "${WH_TMP_DIR}"
|
||||||
|
try_remove_file "$AUTOINSTALL_ZIP"
|
||||||
|
|
||||||
|
wine_run_install "${AUTOINSTALL_EXE}" /VERYSILENT
|
||||||
|
try_remove_file "${AUTOINSTALL_EXE}"
|
||||||
|
|
||||||
|
create_desktop "$PROG_NAME" \
|
||||||
|
"$DRIVE_C/Program Files/KtSoftware/$SHORT_NAME/$SHORT_NAME.exe" "$PROG_ICON"
|
||||||
|
|
||||||
|
create_desktop "Регистрация $PROG_NAME" \
|
||||||
|
"$DRIVE_C/Program Files/KtSoftware/$SHORT_NAME/${SHORT_NAME}Reg.exe" "$PROG_ICON"
|
||||||
|
fi
|
39
autoinstall/arm-kt-dpp
Normal file
39
autoinstall/arm-kt-dpp
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# info_ru: Программа “АРМ КТ ПРОФ ДПП” для заполнения бланков документов о повышении квалификации и профессиональной переподготовке.
|
||||||
|
########################################################################
|
||||||
|
export PROG_URL="https://armregistr.ru/programmnoe-obespechenie/licenziya-na-programmnoe-obespechenie-dlya-zapolneniya-blank"
|
||||||
|
export WH_WINE_USE="wine_x_tkg_10-0_amd64"
|
||||||
|
export WINEPREFIX="arm-kt"
|
||||||
|
export PROG_NAME="АРМ КТ ПРОФ ДПП"
|
||||||
|
export PROG_ICON="armkt"
|
||||||
|
export BASE_PFX="none"
|
||||||
|
export WINEARCH="win64"
|
||||||
|
export INSTALL_DLL=""
|
||||||
|
export WH_WINDOWS_VER="7"
|
||||||
|
|
||||||
|
AUTOINSTALL_URL=$(curl -s "$PROG_URL" | grep "setup.zip" | awk -F'"' '{print $2}')
|
||||||
|
SHORT_NAME=$(echo $AUTOINSTALL_URL | awk -F'/' '{print $5}')
|
||||||
|
VER_EXE=$(echo $AUTOINSTALL_URL | grep -o '[0-9]\+\.[0-9]\+\.[0-9]\+')
|
||||||
|
AUTOINSTALL_ZIP="${WH_TMP_DIR}/$SHORT_NAME-$VER_EXE-setup.zip"
|
||||||
|
AUTOINSTALL_EXE="${WH_TMP_DIR}/$SHORT_NAME-$VER_EXE-setup.exe"
|
||||||
|
|
||||||
|
if [[ -z $VER_EXE ]]
|
||||||
|
then fatal "Не удалось получить версию ПО со страницы на сайте!"
|
||||||
|
else print_info "Устанавливаем $PROG_NAME версии $VER_EXE"
|
||||||
|
fi
|
||||||
|
|
||||||
|
prepair_wine
|
||||||
|
|
||||||
|
if try_download "$AUTOINSTALL_URL" "$AUTOINSTALL_ZIP" ; then
|
||||||
|
unpack "$AUTOINSTALL_ZIP" "${WH_TMP_DIR}"
|
||||||
|
try_remove_file "$AUTOINSTALL_ZIP"
|
||||||
|
|
||||||
|
wine_run_install "${AUTOINSTALL_EXE}" /VERYSILENT
|
||||||
|
try_remove_file "${AUTOINSTALL_EXE}"
|
||||||
|
|
||||||
|
create_desktop "$PROG_NAME" \
|
||||||
|
"$DRIVE_C/Program Files/KtSoftware/$SHORT_NAME/$SHORT_NAME.exe" "$PROG_ICON"
|
||||||
|
|
||||||
|
create_desktop "Регистрация $PROG_NAME" \
|
||||||
|
"$DRIVE_C/Program Files/KtSoftware/$SHORT_NAME/${SHORT_NAME}Reg.exe" "$PROG_ICON"
|
||||||
|
fi
|
35
autoinstall/arm-kt-es
Normal file
35
autoinstall/arm-kt-es
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# info_ru: Программа “АРМ КТ ПРОФ НШ” для заполнения бланков документов об окончании начальной школы.
|
||||||
|
########################################################################
|
||||||
|
export PROG_URL="https://armregistr.ru/programmnoe-obespechenie/licenziya-na-programmnoe-obespechenie-dlya-zapolneniya-blank-1"
|
||||||
|
export WH_WINE_USE="wine_x_tkg_10-0_amd64"
|
||||||
|
export WINEPREFIX="arm-kt"
|
||||||
|
export PROG_NAME="АРМ КТ ПРОФ НШ"
|
||||||
|
export PROG_ICON="armkt"
|
||||||
|
export BASE_PFX="none"
|
||||||
|
export WINEARCH="win64"
|
||||||
|
export INSTALL_DLL=""
|
||||||
|
export WH_WINDOWS_VER="7"
|
||||||
|
|
||||||
|
AUTOINSTALL_URL=$(curl -s "$PROG_URL" | grep "setup.exe" | awk -F'"' '{print $2}')
|
||||||
|
SHORT_NAME=$(echo $AUTOINSTALL_URL | awk -F'/' '{print $5}')
|
||||||
|
VER_EXE=$(echo $AUTOINSTALL_URL | grep -o '[0-9]\+\.[0-9]\+\.[0-9]\+')
|
||||||
|
AUTOINSTALL_EXE="${WH_TMP_DIR}/$SHORT_NAME-$VER_EXE-setup.exe"
|
||||||
|
|
||||||
|
if [[ -z $VER_EXE ]]
|
||||||
|
then fatal "Не удалось получить версию ПО со страницы на сайте!"
|
||||||
|
else print_info "Устанавливаем $PROG_NAME версии $VER_EXE"
|
||||||
|
fi
|
||||||
|
|
||||||
|
prepair_wine
|
||||||
|
|
||||||
|
if try_download "$AUTOINSTALL_URL" "$AUTOINSTALL_EXE" ; then
|
||||||
|
wine_run_install "${AUTOINSTALL_EXE}" /VERYSILENT
|
||||||
|
try_remove_file "${AUTOINSTALL_EXE}"
|
||||||
|
|
||||||
|
create_desktop "$PROG_NAME" \
|
||||||
|
"$DRIVE_C/Program Files/KtSoftware/$SHORT_NAME/$SHORT_NAME.exe" "$PROG_ICON"
|
||||||
|
|
||||||
|
create_desktop "Регистрация $PROG_NAME" \
|
||||||
|
"$DRIVE_C/Program Files/KtSoftware/$SHORT_NAME/${SHORT_NAME}Reg.exe" "$PROG_ICON"
|
||||||
|
fi
|
39
autoinstall/arm-kt-med
Normal file
39
autoinstall/arm-kt-med
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# info_ru: Программа “АРМ КТ ПРОФ МЕД” для заполнения бланков документов о послевузовском профессиональном образовании и сертификатов специалиста.
|
||||||
|
######################################################
|
||||||
|
export PROG_URL="https://armregistr.ru/programmnoe-obespechenie/licenziya-na-programmnoe-obespechenie-dlya-zapolneniya-blank-3"
|
||||||
|
export WH_WINE_USE="wine_x_tkg_10-0_amd64"
|
||||||
|
export WINEPREFIX="arm-kt"
|
||||||
|
export PROG_NAME="АРМ КТ ПРОФ МЕД"
|
||||||
|
export PROG_ICON="armkt"
|
||||||
|
export BASE_PFX="none"
|
||||||
|
export WINEARCH="win64"
|
||||||
|
export INSTALL_DLL=""
|
||||||
|
export WH_WINDOWS_VER="7"
|
||||||
|
|
||||||
|
AUTOINSTALL_URL=$(curl -s "$PROG_URL" | grep "setup.zip" | awk -F'"' '{print $2}')
|
||||||
|
SHORT_NAME=$(echo $AUTOINSTALL_URL | awk -F'/' '{print $5}')
|
||||||
|
VER_EXE=$(echo $AUTOINSTALL_URL | grep -o '[0-9]\+\.[0-9]\+\.[0-9]\+')
|
||||||
|
AUTOINSTALL_ZIP="${WH_TMP_DIR}/$SHORT_NAME-$VER_EXE-setup.zip"
|
||||||
|
AUTOINSTALL_EXE="${WH_TMP_DIR}/$SHORT_NAME-$VER_EXE-setup.exe"
|
||||||
|
|
||||||
|
if [[ -z $VER_EXE ]]
|
||||||
|
then fatal "Не удалось получить версию ПО со страницы на сайте!"
|
||||||
|
else print_info "Устанавливаем $PROG_NAME версии $VER_EXE"
|
||||||
|
fi
|
||||||
|
|
||||||
|
prepair_wine
|
||||||
|
|
||||||
|
if try_download "$AUTOINSTALL_URL" "$AUTOINSTALL_ZIP" ; then
|
||||||
|
unpack "$AUTOINSTALL_ZIP" "${WH_TMP_DIR}"
|
||||||
|
try_remove_file "$AUTOINSTALL_ZIP"
|
||||||
|
|
||||||
|
wine_run_install "${AUTOINSTALL_EXE}" /VERYSILENT
|
||||||
|
try_remove_file "${AUTOINSTALL_EXE}"
|
||||||
|
|
||||||
|
create_desktop "$PROG_NAME" \
|
||||||
|
"$DRIVE_C/Program Files/KtSoftware/$SHORT_NAME/$SHORT_NAME.exe" "$PROG_ICON"
|
||||||
|
|
||||||
|
create_desktop "Регистрация $PROG_NAME" \
|
||||||
|
"$DRIVE_C/Program Files/KtSoftware/$SHORT_NAME/${SHORT_NAME}Reg.exe" "$PROG_ICON"
|
||||||
|
fi
|
39
autoinstall/arm-kt-prof
Normal file
39
autoinstall/arm-kt-prof
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# info_ru: Программа “АРМ КТ ПРОФ ПРОФЕССИЯ” для заполнения бланков документов профессионального обучения.
|
||||||
|
########################################################################
|
||||||
|
export PROG_URL="https://armregistr.ru/programmnoe-obespechenie/licenziya-na-programmnoe-obespechenie-dlya-zapolneniya-blank-5"
|
||||||
|
export WH_WINE_USE="wine_x_tkg_10-0_amd64"
|
||||||
|
export WINEPREFIX="arm-kt"
|
||||||
|
export PROG_NAME="АРМ КТ ПРОФ ПРОФЕССИЯ"
|
||||||
|
export PROG_ICON="armkt"
|
||||||
|
export BASE_PFX="none"
|
||||||
|
export WINEARCH="win64"
|
||||||
|
export INSTALL_DLL=""
|
||||||
|
export WH_WINDOWS_VER="7"
|
||||||
|
|
||||||
|
AUTOINSTALL_URL=$(curl -s "$PROG_URL" | grep "setup.zip" | awk -F'"' '{print $2}')
|
||||||
|
SHORT_NAME=$(echo $AUTOINSTALL_URL | awk -F'/' '{print $5}')
|
||||||
|
VER_EXE=$(echo $AUTOINSTALL_URL | grep -o '[0-9]\+\.[0-9]\+\.[0-9]\+')
|
||||||
|
AUTOINSTALL_ZIP="${WH_TMP_DIR}/$SHORT_NAME-$VER_EXE-setup.zip"
|
||||||
|
AUTOINSTALL_EXE="${WH_TMP_DIR}/$SHORT_NAME-$VER_EXE-setup.exe"
|
||||||
|
|
||||||
|
if [[ -z $VER_EXE ]]
|
||||||
|
then fatal "Не удалось получить версию ПО со страницы на сайте!"
|
||||||
|
else print_info "Устанавливаем $PROG_NAME версии $VER_EXE"
|
||||||
|
fi
|
||||||
|
|
||||||
|
prepair_wine
|
||||||
|
|
||||||
|
if try_download "$AUTOINSTALL_URL" "$AUTOINSTALL_ZIP" ; then
|
||||||
|
unpack "$AUTOINSTALL_ZIP" "${WH_TMP_DIR}"
|
||||||
|
try_remove_file "$AUTOINSTALL_ZIP"
|
||||||
|
|
||||||
|
wine_run_install "${AUTOINSTALL_EXE}" /VERYSILENT
|
||||||
|
try_remove_file "${AUTOINSTALL_EXE}"
|
||||||
|
|
||||||
|
create_desktop "$PROG_NAME" \
|
||||||
|
"$DRIVE_C/Program Files/KtSoftware/$SHORT_NAME/$SHORT_NAME.exe" "$PROG_ICON"
|
||||||
|
|
||||||
|
create_desktop "Регистрация $PROG_NAME" \
|
||||||
|
"$DRIVE_C/Program Files/KtSoftware/$SHORT_NAME/${SHORT_NAME}Reg.exe" "$PROG_ICON"
|
||||||
|
fi
|
39
autoinstall/arm-kt-spo
Normal file
39
autoinstall/arm-kt-spo
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# info_ru: Программа “АРМ КТ ПРОФ СПО” для заполнения бланков документов о среднем профессиональном образовании.
|
||||||
|
########################################################################
|
||||||
|
export PROG_URL="https://armregistr.ru/programmnoe-obespechenie/licenziya-na-programmnoe-obespechenie-dlya-zapolneniya-blank-2"
|
||||||
|
export WH_WINE_USE="wine_x_tkg_10-0_amd64"
|
||||||
|
export WINEPREFIX="arm-kt"
|
||||||
|
export PROG_NAME="АРМ КТ ПРОФ СПО"
|
||||||
|
export PROG_ICON="armkt"
|
||||||
|
export BASE_PFX="none"
|
||||||
|
export WINEARCH="win64"
|
||||||
|
export INSTALL_DLL=""
|
||||||
|
export WH_WINDOWS_VER="7"
|
||||||
|
|
||||||
|
AUTOINSTALL_URL=$(curl -s "$PROG_URL" | grep "setup.zip" | awk -F'"' '{print $2}')
|
||||||
|
SHORT_NAME=$(echo $AUTOINSTALL_URL | awk -F'/' '{print $5}')
|
||||||
|
VER_EXE=$(echo $AUTOINSTALL_URL | grep -o '[0-9]\+\.[0-9]\+\.[0-9]\+')
|
||||||
|
AUTOINSTALL_ZIP="${WH_TMP_DIR}/$SHORT_NAME-$VER_EXE-setup.zip"
|
||||||
|
AUTOINSTALL_EXE="${WH_TMP_DIR}/$SHORT_NAME-$VER_EXE-setup.exe"
|
||||||
|
|
||||||
|
if [[ -z $VER_EXE ]]
|
||||||
|
then fatal "Не удалось получить версию ПО со страницы на сайте!"
|
||||||
|
else print_info "Устанавливаем $PROG_NAME версии $VER_EXE"
|
||||||
|
fi
|
||||||
|
|
||||||
|
prepair_wine
|
||||||
|
|
||||||
|
if try_download "$AUTOINSTALL_URL" "$AUTOINSTALL_ZIP" ; then
|
||||||
|
unpack "$AUTOINSTALL_ZIP" "${WH_TMP_DIR}"
|
||||||
|
try_remove_file "$AUTOINSTALL_ZIP"
|
||||||
|
|
||||||
|
wine_run_install "${AUTOINSTALL_EXE}" /VERYSILENT
|
||||||
|
try_remove_file "${AUTOINSTALL_EXE}"
|
||||||
|
|
||||||
|
create_desktop "$PROG_NAME" \
|
||||||
|
"$DRIVE_C/Program Files/KtSoftware/$SHORT_NAME/$SHORT_NAME.exe" "$PROG_ICON"
|
||||||
|
|
||||||
|
create_desktop "Регистрация $PROG_NAME" \
|
||||||
|
"$DRIVE_C/Program Files/KtSoftware/$SHORT_NAME/${SHORT_NAME}Reg.exe" "$PROG_ICON"
|
||||||
|
fi
|
39
autoinstall/arm-kt-vuz
Normal file
39
autoinstall/arm-kt-vuz
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# info_ru: Программа “АРМ КТ ПРОФ ВУЗ” для заполнения бланков документов о высшем образовании.
|
||||||
|
########################################################################
|
||||||
|
export PROG_URL="https://armregistr.ru/programmnoe-obespechenie/licenziya-na-programmnoe-obespechenie-dlya-zapolneniya-blank-6"
|
||||||
|
export WH_WINE_USE="wine_x_tkg_10-0_amd64"
|
||||||
|
export WINEPREFIX="arm-kt"
|
||||||
|
export PROG_NAME="АРМ КТ ПРОФ ВУЗ"
|
||||||
|
export PROG_ICON="armkt"
|
||||||
|
export BASE_PFX="none"
|
||||||
|
export WINEARCH="win64"
|
||||||
|
export INSTALL_DLL=""
|
||||||
|
export WH_WINDOWS_VER="7"
|
||||||
|
|
||||||
|
AUTOINSTALL_URL=$(curl -s "$PROG_URL" | grep "setup.zip" | awk -F'"' '{print $2}')
|
||||||
|
SHORT_NAME=$(echo $AUTOINSTALL_URL | awk -F'/' '{print $5}')
|
||||||
|
VER_EXE=$(echo $AUTOINSTALL_URL | grep -o '[0-9]\+\.[0-9]\+\.[0-9]\+')
|
||||||
|
AUTOINSTALL_ZIP="${WH_TMP_DIR}/$SHORT_NAME-$VER_EXE-setup.zip"
|
||||||
|
AUTOINSTALL_EXE="${WH_TMP_DIR}/$SHORT_NAME-$VER_EXE-setup.exe"
|
||||||
|
|
||||||
|
if [[ -z $VER_EXE ]]
|
||||||
|
then fatal "Не удалось получить версию ПО со страницы на сайте!"
|
||||||
|
else print_info "Устанавливаем $PROG_NAME версии $VER_EXE"
|
||||||
|
fi
|
||||||
|
|
||||||
|
prepair_wine
|
||||||
|
|
||||||
|
if try_download "$AUTOINSTALL_URL" "$AUTOINSTALL_ZIP" ; then
|
||||||
|
unpack "$AUTOINSTALL_ZIP" "${WH_TMP_DIR}"
|
||||||
|
try_remove_file "$AUTOINSTALL_ZIP"
|
||||||
|
|
||||||
|
wine_run_install "${AUTOINSTALL_EXE}" /VERYSILENT
|
||||||
|
try_remove_file "${AUTOINSTALL_EXE}"
|
||||||
|
|
||||||
|
create_desktop "$PROG_NAME" \
|
||||||
|
"$DRIVE_C/Program Files/KtSoftware/$SHORT_NAME/$SHORT_NAME.exe" "$PROG_ICON"
|
||||||
|
|
||||||
|
create_desktop "Регистрация $PROG_NAME" \
|
||||||
|
"$DRIVE_C/Program Files/KtSoftware/$SHORT_NAME/${SHORT_NAME}Reg.exe" "$PROG_ICON"
|
||||||
|
fi
|
@@ -6,10 +6,10 @@ export WH_WINE_USE="wine_x_tkg_10-0_amd64"
|
|||||||
export WINEPREFIX="scadoffice"
|
export WINEPREFIX="scadoffice"
|
||||||
export PROG_NAME="SCAD Office"
|
export PROG_NAME="SCAD Office"
|
||||||
export PROG_ICON="scadoffice"
|
export PROG_ICON="scadoffice"
|
||||||
export BASE_PFX="scadaoffice_pfx_x64_v03"
|
export BASE_PFX="scadaoffice_pfx_x64_v04"
|
||||||
export WH_WINDOWS_VER="10"
|
export WH_WINDOWS_VER="10"
|
||||||
export WINEARCH="win64"
|
export WINEARCH="win64"
|
||||||
export INSTALL_DLL="dotnet20 dotnet472 dotnet48 gdiplus vcrun6sp6 vcrun2005 vcrun2019 d3dx11_42 d3dx11_43 d3dx9 d3dcompiler_42 d3dcompiler_43 d3dcompiler_46 d3dcompiler_47 richtx32 riched30 riched20 msxml6"
|
export INSTALL_DLL="dotnet20 dotnet48 gdiplus vcrun6sp6 vcrun2005 vcrun2019 d3dx11_42 d3dx11_43 d3dx9 d3dcompiler_42 d3dcompiler_43 d3dcompiler_46 d3dcompiler_47 richtx32 riched30 riched20 msxml6"
|
||||||
export WH_XDG_OPEN="rtf"
|
export WH_XDG_OPEN="rtf"
|
||||||
AUTOINSTALL_EXE="${WH_TMP_DIR}/SCADOffice_installer.exe"
|
AUTOINSTALL_EXE="${WH_TMP_DIR}/SCADOffice_installer.exe"
|
||||||
SCADOFFICE_ADDONS_URL="https://cloud.linux-gaming.ru/portproton/scadoffice_addons_v02.tar.xz"
|
SCADOFFICE_ADDONS_URL="https://cloud.linux-gaming.ru/portproton/scadoffice_addons_v02.tar.xz"
|
||||||
|
BIN
image/armkt.png
Normal file
BIN
image/armkt.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 23 KiB |
BIN
image/nettest_client.png
Normal file
BIN
image/nettest_client.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.9 KiB |
BIN
image/nettest_server.png
Normal file
BIN
image/nettest_server.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 4.7 KiB |
34
manualinstall/nettest
Normal file
34
manualinstall/nettest
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# info_ru: Установщик программного комплекса NetTest (демо-версия)
|
||||||
|
########################################################################
|
||||||
|
export PROG_URL="https://www.kpolyakov.spb.ru/prog/nettest/nettget.htm"
|
||||||
|
export WH_WINE_USE="wine_x_tkg_10-0_amd64"
|
||||||
|
export WINEPREFIX="nettest"
|
||||||
|
export PROG_NAME="NetTest"
|
||||||
|
export PROG_ICON="nettest"
|
||||||
|
export BASE_PFX="none"
|
||||||
|
export WINEARCH="win64"
|
||||||
|
export INSTALL_DLL=""
|
||||||
|
export WH_WINDOWS_VER="10"
|
||||||
|
|
||||||
|
ZIP_FILE="$2"
|
||||||
|
|
||||||
|
if [[ -f "$ZIP_FILE" ]] \
|
||||||
|
&& [[ $ZIP_FILE =~ ".zip" ]]
|
||||||
|
then
|
||||||
|
prepair_wine
|
||||||
|
PROG_PATH="$DRIVE_C/nettest"
|
||||||
|
unpack "$2" "$PROG_PATH"
|
||||||
|
|
||||||
|
cp -fr "$PROG_PATH/fonts/"* "$DRIVE_C/windows/Fonts/"
|
||||||
|
|
||||||
|
create_desktop "$PROG_NAME (Сервер)" "$PROG_PATH/testser.exe" "nettest_server"
|
||||||
|
create_desktop "$PROG_NAME (Клиент)" "$PROG_PATH/testcli.exe" "nettest_client"
|
||||||
|
else
|
||||||
|
fatal "Не найден файл архива для $PROG_NAME. Перезапустите по примеру:
|
||||||
|
winehelper install $1 \"/путь/до/архива\""
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@@ -5,6 +5,7 @@
|
|||||||
fb7fdfde96de10a1b3b051bdf2727b6a7c1768b878483726454dd6726e9e0193 wine-9.0.14-alt1-i586-spravkibk.tar.xz
|
fb7fdfde96de10a1b3b051bdf2727b6a7c1768b878483726454dd6726e9e0193 wine-9.0.14-alt1-i586-spravkibk.tar.xz
|
||||||
e0a84bb4908c3927954d7eef6b8ac7212e442b8c107d000c6890fec340f96183 wine-9.0.14-alt1-amd64.tar.xz
|
e0a84bb4908c3927954d7eef6b8ac7212e442b8c107d000c6890fec340f96183 wine-9.0.14-alt1-amd64.tar.xz
|
||||||
6f86d2220b65b709bf88c6f829a4998de3b929cc2091cd1333a51c32e1491b79 wine-9.0.9-alt1-i586.tar.xz
|
6f86d2220b65b709bf88c6f829a4998de3b929cc2091cd1333a51c32e1491b79 wine-9.0.9-alt1-i586.tar.xz
|
||||||
|
f1bf1261550ca2928cefacdb724926d3d6d103433d0ff6882ee9783a50d8f4e4 wine-8.8-staging-amd64.tar.xz
|
||||||
61bec1230b37b8fcc69fd45f848b44fd88cc41fcdd5dc3080336d7da63660f40 wine-7.16.1-alt1-amd64.tar.xz
|
61bec1230b37b8fcc69fd45f848b44fd88cc41fcdd5dc3080336d7da63660f40 wine-7.16.1-alt1-amd64.tar.xz
|
||||||
6fea17fd131f57c2ebf7ca4c60d3c5a9e819afe16e5d0b77ecb750da99ae0e38 wine-7.16.1-alt1-i586.tar.xz
|
6fea17fd131f57c2ebf7ca4c60d3c5a9e819afe16e5d0b77ecb750da99ae0e38 wine-7.16.1-alt1-i586.tar.xz
|
||||||
|
|
||||||
@@ -211,8 +212,8 @@ dfb44ce5e5af7dba1686932c63d6b05e5dd6919a21c78130a7d1d0271b93958e audiorecstatio
|
|||||||
# create with wine_x_tkg_10-0_i586 (universal user: xuser)
|
# create with wine_x_tkg_10-0_i586 (universal user: xuser)
|
||||||
# winetricks arial dotnet7 dotnetdesktop7 renderer=gdi
|
# winetricks arial dotnet7 dotnetdesktop7 renderer=gdi
|
||||||
|
|
||||||
25e277c7afa4a9afc5f013cb05f872c12a7f381c4f0503a423dcacccca9a14c6 scadaoffice_pfx_x64_v03.tar.xz
|
4fa93434c5c15440014357323257ddcee7d28b94ad6a56bd6f5a08b33ae4c3cb scadaoffice_pfx_x64_v04.tar.xz
|
||||||
# create with wine_x_tkg_10-0_i586 (universal user: xuser)
|
# create with wine-8.8-staging-amd64
|
||||||
# winetricks dotnet48 gdiplus vcrun6sp6 vcrun2005 vcrun2019 d3dx11_42 d3dx11_43 d3dx9 d3dcompiler_42 d3dcompiler_43 d3dcompiler_46 d3dcompiler_47 richtx32 riched30 riched20 msxml6 dotnet20
|
# winetricks dotnet48 gdiplus vcrun6sp6 vcrun2005 vcrun2019 d3dx11_42 d3dx11_43 d3dx9 d3dcompiler_42 d3dcompiler_43 d3dcompiler_46 d3dcompiler_47 richtx32 riched30 riched20 msxml6 dotnet20
|
||||||
# + addons with ODBC, SSH, *.reg
|
# + addons with ODBC, SSH, *.reg
|
||||||
0f4ef434df07bc338ae308af44330590eaa1d9c94b64850514e55b960642d0eb scadoffice_addons_v02.tar.xz
|
0f4ef434df07bc338ae308af44330590eaa1d9c94b64850514e55b960642d0eb scadoffice_addons_v02.tar.xz
|
||||||
|
34
winehelper
34
winehelper
@@ -20,7 +20,7 @@ if [[ "$(realpath "$0")" == "/usr/bin/$SCRIPT_NAME" ]] ; then
|
|||||||
CHANGELOG_FILE="/usr/share/doc/winehelper-$WH_VERSION/CHANGELOG"
|
CHANGELOG_FILE="/usr/share/doc/winehelper-$WH_VERSION/CHANGELOG"
|
||||||
LICENSE_FILE="/usr/share/doc/winehelper-$WH_VERSION/LICENSE"
|
LICENSE_FILE="/usr/share/doc/winehelper-$WH_VERSION/LICENSE"
|
||||||
AGREEMENT="/usr/share/doc/winehelper-$WH_VERSION/LICENSE_AGREEMENT"
|
AGREEMENT="/usr/share/doc/winehelper-$WH_VERSION/LICENSE_AGREEMENT"
|
||||||
THIRD_PARTY_FILE="/usr/share/doc/winehelper-$WH_VERSION/THIRD_PARTY"
|
THIRD_PARTY_FILE="/usr/share/doc/winehelper-$WH_VERSION/THIRD-PARTY"
|
||||||
else
|
else
|
||||||
# переменные для тестового запуска WineHelper из репозитория
|
# переменные для тестового запуска WineHelper из репозитория
|
||||||
USER_WORK_PATH="$HOME/test-$SCRIPT_NAME"
|
USER_WORK_PATH="$HOME/test-$SCRIPT_NAME"
|
||||||
@@ -617,6 +617,7 @@ create_desktop () {
|
|||||||
echo "StartupNotify=true"
|
echo "StartupNotify=true"
|
||||||
echo "Path=$DATA_PATH"
|
echo "Path=$DATA_PATH"
|
||||||
echo "Icon=$icon_file"
|
echo "Icon=$icon_file"
|
||||||
|
echo "StartupWMClass=$(basename "$exe_file")"
|
||||||
} > "$USER_WORK_PATH/$desktop_filename.desktop"
|
} > "$USER_WORK_PATH/$desktop_filename.desktop"
|
||||||
chmod +x "$USER_WORK_PATH/$desktop_filename.desktop"
|
chmod +x "$USER_WORK_PATH/$desktop_filename.desktop"
|
||||||
|
|
||||||
@@ -652,7 +653,7 @@ create_desktop () {
|
|||||||
[Desktop Entry]
|
[Desktop Entry]
|
||||||
Type=Directory
|
Type=Directory
|
||||||
Name=WineHelper
|
Name=WineHelper
|
||||||
Icon=wine
|
Icon=winehelper
|
||||||
EOF
|
EOF
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -1110,6 +1111,11 @@ init_wineprefix () {
|
|||||||
export DRIVE_C="$WINEPREFIX/drive_c"
|
export DRIVE_C="$WINEPREFIX/drive_c"
|
||||||
export XUSER_PATH="$DRIVE_C/users/xuser"
|
export XUSER_PATH="$DRIVE_C/users/xuser"
|
||||||
|
|
||||||
|
if [[ -d "$XUSER_PATH" ]] \
|
||||||
|
&& [[ ! -d "$DRIVE_C/users/$USER" ]]
|
||||||
|
then try_force_link_dir "$XUSER_PATH" "$DRIVE_C/users/$USER"
|
||||||
|
fi
|
||||||
|
|
||||||
if [[ ! -f "$WINEPREFIX/.firstboot" ]] ; then
|
if [[ ! -f "$WINEPREFIX/.firstboot" ]] ; then
|
||||||
create_new_dir "$WINEPREFIX"
|
create_new_dir "$WINEPREFIX"
|
||||||
if [[ "$CLEAR_PREFIX" == "1" ]]
|
if [[ "$CLEAR_PREFIX" == "1" ]]
|
||||||
@@ -1355,8 +1361,6 @@ init_database () {
|
|||||||
}
|
}
|
||||||
|
|
||||||
prepair_wine () {
|
prepair_wine () {
|
||||||
var_winedlloverride_update "winemenubuilder.exe=d"
|
|
||||||
|
|
||||||
if [[ -n "$INSTALL_SCRIPT_NAME" ]]
|
if [[ -n "$INSTALL_SCRIPT_NAME" ]]
|
||||||
then print_info "Используются настройки из скрипта установки: $INSTALL_SCRIPT_NAME"
|
then print_info "Используются настройки из скрипта установки: $INSTALL_SCRIPT_NAME"
|
||||||
else init_database
|
else init_database
|
||||||
@@ -1814,9 +1818,9 @@ create_base_pfx () {
|
|||||||
&& [[ ! -L "$users_dir/$USER" ]]
|
&& [[ ! -L "$users_dir/$USER" ]]
|
||||||
then
|
then
|
||||||
if [[ -L "$users_dir/xuser" ]]
|
if [[ -L "$users_dir/xuser" ]]
|
||||||
then try_remove_dir "$users_dir/xuser/"
|
then try_remove_dir "$users_dir/xuser"
|
||||||
fi
|
fi
|
||||||
create_new_dir "$users_dir/xuser/"
|
create_new_dir "$users_dir/xuser"
|
||||||
cp -fr "$users_dir/$USER"/* "$users_dir/xuser/"
|
cp -fr "$users_dir/$USER"/* "$users_dir/xuser/"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -2127,6 +2131,19 @@ select_component_version() {
|
|||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
|
run_install_to_prefix() {
|
||||||
|
export WINEPREFIX="$1"
|
||||||
|
local WIN_FILE_EXEC="$2"
|
||||||
|
|
||||||
|
if [[ -z "$WINEPREFIX" ]] || [[ -z "$WIN_FILE_EXEC" ]]; then
|
||||||
|
fatal "Использование: $SCRIPT_NAME install-to-prefix <имя_префикса> <путь_к_установщику>"
|
||||||
|
fi
|
||||||
|
|
||||||
|
check_prefix_var
|
||||||
|
prepair_wine
|
||||||
|
wine_run_install "$WIN_FILE_EXEC"
|
||||||
|
}
|
||||||
|
|
||||||
run_install_dxvk() {
|
run_install_dxvk() {
|
||||||
local version="$1"
|
local version="$1"
|
||||||
if [[ -z "$version" ]] ; then
|
if [[ -z "$version" ]] ; then
|
||||||
@@ -2243,6 +2260,10 @@ else
|
|||||||
arg1="--help"
|
arg1="--help"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# отключаем создание .desktop файлов средствами wine
|
||||||
|
# и отключаем winebth, так как может сломать winedevice.exe
|
||||||
|
var_winedlloverride_update "winemenubuilder.exe,winebth.sys=d"
|
||||||
|
|
||||||
case "$arg1" in
|
case "$arg1" in
|
||||||
--version|version) rpm -qi "$SCRIPT_NAME" ; exit 0 ;;
|
--version|version) rpm -qi "$SCRIPT_NAME" ; exit 0 ;;
|
||||||
--help|help) wh_info ; exit 0 ;;
|
--help|help) wh_info ; exit 0 ;;
|
||||||
@@ -2255,6 +2276,7 @@ case "$arg1" in
|
|||||||
winetricks) prepair_wine ; "$WH_WINETRICKS" -q "$@" ;;
|
winetricks) prepair_wine ; "$WH_WINETRICKS" -q "$@" ;;
|
||||||
desktop) create_desktop "$@" ; exit 0 ;;
|
desktop) create_desktop "$@" ; exit 0 ;;
|
||||||
install|-i) run_autoinstall "$@" ;;
|
install|-i) run_autoinstall "$@" ;;
|
||||||
|
install-to-prefix) run_install_to_prefix "$@" ;;
|
||||||
install-dxvk) run_install_dxvk "$@" ;;
|
install-dxvk) run_install_dxvk "$@" ;;
|
||||||
install-vkd3d) run_install_vkd3d "$@" ;;
|
install-vkd3d) run_install_vkd3d "$@" ;;
|
||||||
change-wine) run_change_wine_version "$@" ;;
|
change-wine) run_change_wine_version "$@" ;;
|
||||||
|
@@ -1,3 +1,4 @@
|
|||||||
|
#!/usr/bin/env xdg-open
|
||||||
[Desktop Entry]
|
[Desktop Entry]
|
||||||
Name=WineHelper
|
Name=WineHelper
|
||||||
Exec=winehelper gui %F
|
Exec=winehelper gui %F
|
||||||
@@ -7,3 +8,4 @@ Type=Application
|
|||||||
Categories=WineHelper;Utility;Emulator;
|
Categories=WineHelper;Utility;Emulator;
|
||||||
StartupNotify=true
|
StartupNotify=true
|
||||||
Icon=winehelper
|
Icon=winehelper
|
||||||
|
StartupWMClass=winehelper
|
||||||
|
@@ -1571,6 +1571,12 @@ class WineHelperGUI(QMainWindow):
|
|||||||
|
|
||||||
# Загружаем состояние после создания всех виджетов
|
# Загружаем состояние после создания всех виджетов
|
||||||
self._load_created_prefixes()
|
self._load_created_prefixes()
|
||||||
|
# После загрузки выбираем первый элемент, если он доступен
|
||||||
|
if self.created_prefix_selector.count() > 0:
|
||||||
|
self.created_prefix_selector.setCurrentIndex(0)
|
||||||
|
else:
|
||||||
|
# Если список пуст, сбрасываем панель управления
|
||||||
|
self.on_created_prefix_selected(-1)
|
||||||
|
|
||||||
# Инициализируем состояние, которое будет использоваться для логов
|
# Инициализируем состояние, которое будет использоваться для логов
|
||||||
self._reset_log_state()
|
self._reset_log_state()
|
||||||
@@ -2112,10 +2118,17 @@ class WineHelperGUI(QMainWindow):
|
|||||||
self.change_wine_version_button.setToolTip("Изменение версии Wine или Proton для выбранного префикса.")
|
self.change_wine_version_button.setToolTip("Изменение версии Wine или Proton для выбранного префикса.")
|
||||||
management_layout.addWidget(self.change_wine_version_button, 3, 0, 1, 2)
|
management_layout.addWidget(self.change_wine_version_button, 3, 0, 1, 2)
|
||||||
|
|
||||||
# Добавляем небольшой отступ
|
self.esync_button = QPushButton("ESync")
|
||||||
spacer_widget = QWidget()
|
self.esync_button.setCheckable(True)
|
||||||
spacer_widget.setFixedHeight(5)
|
self.esync_button.setToolTip("Включить/выключить Eventfd-based synchronization.")
|
||||||
management_layout.addWidget(spacer_widget, 4, 0, 1, 2)
|
self.esync_button.clicked.connect(lambda: self.update_sync_option("WINEESYNC", self.esync_button.isChecked()))
|
||||||
|
management_layout.addWidget(self.esync_button, 4, 0)
|
||||||
|
|
||||||
|
self.fsync_button = QPushButton("FSync")
|
||||||
|
self.fsync_button.setCheckable(True)
|
||||||
|
self.fsync_button.setToolTip("Включить/выключить Futex-based synchronization.")
|
||||||
|
self.fsync_button.clicked.connect(lambda: self.update_sync_option("WINEFSYNC", self.fsync_button.isChecked()))
|
||||||
|
management_layout.addWidget(self.fsync_button, 4, 1)
|
||||||
|
|
||||||
self.dxvk_manage_button = QPushButton("Управление DXVK")
|
self.dxvk_manage_button = QPushButton("Управление DXVK")
|
||||||
self.dxvk_manage_button.setMinimumHeight(32)
|
self.dxvk_manage_button.setMinimumHeight(32)
|
||||||
@@ -2129,62 +2142,49 @@ class WineHelperGUI(QMainWindow):
|
|||||||
self.vkd3d_manage_button.setToolTip("Установка или удаление определенной версии vkd3d-proton в префиксе.")
|
self.vkd3d_manage_button.setToolTip("Установка или удаление определенной версии vkd3d-proton в префиксе.")
|
||||||
management_layout.addWidget(self.vkd3d_manage_button, 5, 1)
|
management_layout.addWidget(self.vkd3d_manage_button, 5, 1)
|
||||||
|
|
||||||
# --- Правая сторона: Информационный блок ---
|
# --- Правая сторона: Информационный блок и кнопки установки ---
|
||||||
|
right_column_widget = QWidget()
|
||||||
|
right_column_layout = QVBoxLayout(right_column_widget)
|
||||||
|
right_column_layout.setContentsMargins(0, 0, 0, 0)
|
||||||
|
right_column_layout.setSpacing(10)
|
||||||
|
|
||||||
self.prefix_info_display = QTextBrowser()
|
self.prefix_info_display = QTextBrowser()
|
||||||
self.prefix_info_display.setReadOnly(True)
|
self.prefix_info_display.setReadOnly(True)
|
||||||
self.prefix_info_display.setFrameStyle(QFrame.StyledPanel)
|
self.prefix_info_display.setFrameStyle(QFrame.StyledPanel)
|
||||||
# Увеличиваем rowspan, чтобы учесть добавленный отступ
|
right_column_layout.addWidget(self.prefix_info_display)
|
||||||
management_layout.addWidget(self.prefix_info_display, 0, 2, 6, 1)
|
|
||||||
|
|
||||||
management_layout.setColumnStretch(0, 1)
|
|
||||||
management_layout.setColumnStretch(1, 1)
|
|
||||||
management_layout.setColumnStretch(2, 2)
|
|
||||||
|
|
||||||
# --- Separator and Installer ---
|
|
||||||
separator = QFrame()
|
|
||||||
separator.setFrameShape(QFrame.HLine)
|
|
||||||
separator.setFrameShadow(QFrame.Sunken)
|
|
||||||
management_layout.addWidget(separator, 6, 0, 1, 3)
|
|
||||||
|
|
||||||
install_group = QWidget()
|
install_group = QWidget()
|
||||||
install_layout = QVBoxLayout(install_group)
|
install_layout = QVBoxLayout(install_group)
|
||||||
install_layout.setContentsMargins(0, 5, 0, 0)
|
install_layout.setContentsMargins(0, 0, 0, 0)
|
||||||
install_layout.setSpacing(5)
|
install_layout.setSpacing(5)
|
||||||
|
|
||||||
install_path_layout = QHBoxLayout()
|
|
||||||
self.prefix_install_path_edit = QLineEdit()
|
|
||||||
self.prefix_install_path_edit.setPlaceholderText("Укажите путь к установочному файлу .exe или .msi...")
|
|
||||||
install_path_layout.addWidget(self.prefix_install_path_edit)
|
|
||||||
|
|
||||||
self.prefix_browse_button = QPushButton("Обзор...")
|
|
||||||
self.prefix_browse_button.clicked.connect(self.browse_for_prefix_installer)
|
|
||||||
install_path_layout.addWidget(self.prefix_browse_button)
|
|
||||||
install_layout.addLayout(install_path_layout)
|
|
||||||
|
|
||||||
# Layout для кнопок установки и создания ярлыка
|
|
||||||
action_buttons_layout = QHBoxLayout()
|
|
||||||
|
|
||||||
self.prefix_install_button = QPushButton("Установить приложение в префикс")
|
self.prefix_install_button = QPushButton("Установить приложение в префикс")
|
||||||
self.prefix_install_button.setEnabled(False)
|
self.prefix_install_button.setEnabled(False)
|
||||||
self.prefix_install_button.clicked.connect(self.run_prefix_installer)
|
self.prefix_install_button.clicked.connect(self.browse_and_run_prefix_installer)
|
||||||
action_buttons_layout.addWidget(self.prefix_install_button)
|
install_layout.addWidget(self.prefix_install_button)
|
||||||
|
|
||||||
self.create_launcher_button = QPushButton("Создать ярлык для приложения в префиксе")
|
self.create_launcher_button = QPushButton("Создать ярлык для приложения в префиксе")
|
||||||
self.create_launcher_button.setToolTip(
|
self.create_launcher_button.setToolTip(
|
||||||
"Создает ярлык в меню и на вкладке 'Установленные' для .exe файла внутри префикса.")
|
"Создает ярлык в меню и на вкладке 'Установленные' для .exe файла внутри префикса.")
|
||||||
self.create_launcher_button.clicked.connect(self.create_launcher_for_prefix)
|
self.create_launcher_button.clicked.connect(self.create_launcher_for_prefix)
|
||||||
self.create_launcher_button.setEnabled(False) # Изначально неактивна
|
self.create_launcher_button.setEnabled(False) # Изначально неактивна
|
||||||
action_buttons_layout.addWidget(self.create_launcher_button)
|
install_layout.addWidget(self.create_launcher_button)
|
||||||
install_layout.addLayout(action_buttons_layout)
|
right_column_layout.addWidget(install_group)
|
||||||
management_layout.addWidget(install_group, 7, 0, 1, 3)
|
|
||||||
|
right_column_layout.setStretch(0, 1) # Информационное окно растягивается
|
||||||
|
right_column_layout.setStretch(1, 0) # Группа кнопок не растягивается
|
||||||
|
|
||||||
|
management_layout.addWidget(right_column_widget, 0, 2, 6, 1)
|
||||||
|
|
||||||
|
management_layout.setColumnStretch(0, 1)
|
||||||
|
management_layout.setColumnStretch(1, 1)
|
||||||
|
management_layout.setColumnStretch(2, 2)
|
||||||
|
|
||||||
container_layout.addWidget(self.prefix_management_groupbox)
|
container_layout.addWidget(self.prefix_management_groupbox)
|
||||||
layout.addWidget(self.management_container_groupbox)
|
layout.addWidget(self.management_container_groupbox)
|
||||||
layout.addStretch()
|
layout.addStretch()
|
||||||
self.add_tab(self.prefix_tab, "Менеджер префиксов")
|
self.add_tab(self.prefix_tab, "Менеджер префиксов")
|
||||||
|
|
||||||
self.prefix_install_path_edit.textChanged.connect(self.update_prefix_install_button_state)
|
|
||||||
|
|
||||||
def _get_current_prefixes(self):
|
def _get_current_prefixes(self):
|
||||||
"""Возвращает множество имен существующих префиксов."""
|
"""Возвращает множество имен существующих префиксов."""
|
||||||
prefixes_root_path = os.path.join(Var.USER_WORK_PATH, "prefixes")
|
prefixes_root_path = os.path.join(Var.USER_WORK_PATH, "prefixes")
|
||||||
@@ -2206,7 +2206,7 @@ class WineHelperGUI(QMainWindow):
|
|||||||
self.created_prefix_selector.removeItem(index_to_remove)
|
self.created_prefix_selector.removeItem(index_to_remove)
|
||||||
|
|
||||||
def _load_created_prefixes(self):
|
def _load_created_prefixes(self):
|
||||||
"""Загружает список созданных префиксов, сканируя файловую систему, и восстанавливает последнее выбранное состояние."""
|
"""Загружает и обновляет список созданных префиксов в выпадающем списке."""
|
||||||
prefixes_root_path = os.path.join(Var.USER_WORK_PATH, "prefixes")
|
prefixes_root_path = os.path.join(Var.USER_WORK_PATH, "prefixes")
|
||||||
if not os.path.isdir(prefixes_root_path):
|
if not os.path.isdir(prefixes_root_path):
|
||||||
self.management_container_groupbox.setVisible(False)
|
self.management_container_groupbox.setVisible(False)
|
||||||
@@ -2234,13 +2234,6 @@ class WineHelperGUI(QMainWindow):
|
|||||||
|
|
||||||
self.management_container_groupbox.setVisible(True)
|
self.management_container_groupbox.setVisible(True)
|
||||||
|
|
||||||
# По умолчанию выбираем первый элемент в списке, если он есть.
|
|
||||||
if self.created_prefix_selector.count() > 0:
|
|
||||||
self.created_prefix_selector.setCurrentIndex(0)
|
|
||||||
else:
|
|
||||||
# Если список пуст, убедимся, что панель управления сброшена.
|
|
||||||
self.on_created_prefix_selected(-1)
|
|
||||||
|
|
||||||
def on_created_prefix_selected(self, index):
|
def on_created_prefix_selected(self, index):
|
||||||
"""Обрабатывает выбор префикса из выпадающего списка."""
|
"""Обрабатывает выбор префикса из выпадающего списка."""
|
||||||
if index == -1:
|
if index == -1:
|
||||||
@@ -2317,7 +2310,6 @@ class WineHelperGUI(QMainWindow):
|
|||||||
# Успешное удаление, обновляем GUI
|
# Успешное удаление, обновляем GUI
|
||||||
self._remove_prefix_from_gui_state(prefix_name)
|
self._remove_prefix_from_gui_state(prefix_name)
|
||||||
self.update_installed_apps()
|
self.update_installed_apps()
|
||||||
QMessageBox.information(self, "Успех", f"Префикс '{prefix_name}' и все связанные с ним данные были успешно удалены.")
|
|
||||||
else:
|
else:
|
||||||
QMessageBox.critical(self, "Ошибка удаления", f"Не удалось удалить префикс '{prefix_name}'.\nПодробности смотрите в логе.")
|
QMessageBox.critical(self, "Ошибка удаления", f"Не удалось удалить префикс '{prefix_name}'.\nПодробности смотрите в логе.")
|
||||||
|
|
||||||
@@ -2326,25 +2318,30 @@ class WineHelperGUI(QMainWindow):
|
|||||||
is_prefix_selected = bool(prefix_name)
|
is_prefix_selected = bool(prefix_name)
|
||||||
self.prefix_management_groupbox.setEnabled(is_prefix_selected)
|
self.prefix_management_groupbox.setEnabled(is_prefix_selected)
|
||||||
self.create_launcher_button.setEnabled(is_prefix_selected)
|
self.create_launcher_button.setEnabled(is_prefix_selected)
|
||||||
|
self.prefix_install_button.setEnabled(is_prefix_selected)
|
||||||
|
|
||||||
if is_prefix_selected:
|
if is_prefix_selected:
|
||||||
self.update_prefix_info_display(prefix_name)
|
self.update_prefix_info_display(prefix_name)
|
||||||
else:
|
else:
|
||||||
self.prefix_info_display.clear()
|
self.prefix_info_display.clear()
|
||||||
self.prefix_install_path_edit.clear()
|
# Сбрасываем состояние кнопок, когда префикс не выбран
|
||||||
|
self.esync_button.setChecked(False)
|
||||||
self.update_prefix_install_button_state()
|
self.fsync_button.setChecked(False)
|
||||||
|
|
||||||
def update_prefix_info_display(self, prefix_name):
|
def update_prefix_info_display(self, prefix_name):
|
||||||
"""Обновляет информационный блок для созданного префикса, читая данные из last.conf."""
|
"""Обновляет информационный блок для созданного префикса, читая данные из last.conf."""
|
||||||
if not prefix_name:
|
if not prefix_name:
|
||||||
self.prefix_info_display.clear()
|
self.prefix_info_display.clear()
|
||||||
|
self.esync_button.setChecked(False)
|
||||||
|
self.fsync_button.setChecked(False)
|
||||||
return
|
return
|
||||||
|
|
||||||
last_conf_path = os.path.join(Var.USER_WORK_PATH, "prefixes", prefix_name, "last.conf")
|
last_conf_path = os.path.join(Var.USER_WORK_PATH, "prefixes", prefix_name, "last.conf")
|
||||||
|
|
||||||
if not os.path.exists(last_conf_path):
|
if not os.path.exists(last_conf_path):
|
||||||
self.prefix_info_display.setHtml(f"<p>Файл конфигурации last.conf не найден для префикса '{prefix_name}'.</p>")
|
self.prefix_info_display.setHtml(f"<p>Файл конфигурации last.conf не найден для префикса '{prefix_name}'.</p>")
|
||||||
|
self.esync_button.setChecked(False)
|
||||||
|
self.fsync_button.setChecked(False)
|
||||||
return
|
return
|
||||||
|
|
||||||
# Словарь для хранения всех переменных из файла
|
# Словарь для хранения всех переменных из файла
|
||||||
@@ -2363,6 +2360,17 @@ class WineHelperGUI(QMainWindow):
|
|||||||
self.prefix_info_display.setHtml(f"<p>Ошибка чтения last.conf: {e}</p>")
|
self.prefix_info_display.setHtml(f"<p>Ошибка чтения last.conf: {e}</p>")
|
||||||
return
|
return
|
||||||
|
|
||||||
|
# --- Обновить кнопки ESync/FSync ---
|
||||||
|
# Блокировать сигналы, чтобы предотвратить запуск метода обновления, когда мы устанавливаем состояние
|
||||||
|
self.esync_button.blockSignals(True)
|
||||||
|
self.fsync_button.blockSignals(True)
|
||||||
|
|
||||||
|
self.esync_button.setChecked(all_vars.get("WINEESYNC") == "1")
|
||||||
|
self.fsync_button.setChecked(all_vars.get("WINEFSYNC") == "1")
|
||||||
|
|
||||||
|
self.esync_button.blockSignals(False)
|
||||||
|
self.fsync_button.blockSignals(False)
|
||||||
|
|
||||||
# Карта для красивого отображения известных переменных
|
# Карта для красивого отображения известных переменных
|
||||||
display_map = {
|
display_map = {
|
||||||
"WINEPREFIX": ("Путь", lambda v: v),
|
"WINEPREFIX": ("Путь", lambda v: v),
|
||||||
@@ -2371,8 +2379,10 @@ class WineHelperGUI(QMainWindow):
|
|||||||
"BASE_PFX": ("Тип", lambda v: 'Чистый' if v == "none" else 'С рекомендуемыми библиотеками'),
|
"BASE_PFX": ("Тип", lambda v: 'Чистый' if v == "none" else 'С рекомендуемыми библиотеками'),
|
||||||
"DXVK_VER": ("Версия DXVK", lambda v: v if v else "Не установлено"),
|
"DXVK_VER": ("Версия DXVK", lambda v: v if v else "Не установлено"),
|
||||||
"VKD3D_VER": ("Версия VKD3D", lambda v: v if v else "Не установлено"),
|
"VKD3D_VER": ("Версия VKD3D", lambda v: v if v else "Не установлено"),
|
||||||
|
"WINEESYNC": ("ESync", lambda v: "Включен" if v == "1" else "Выключен"),
|
||||||
|
"WINEFSYNC": ("FSync", lambda v: "Включен" if v == "1" else "Выключен"),
|
||||||
}
|
}
|
||||||
display_order = ["WINEPREFIX", "WINEARCH", "WH_WINE_USE", "BASE_PFX", "DXVK_VER", "VKD3D_VER"]
|
display_order = ["WINEPREFIX", "WINEARCH", "WH_WINE_USE", "BASE_PFX", "DXVK_VER", "VKD3D_VER", "WINEESYNC", "WINEFSYNC"]
|
||||||
|
|
||||||
html_content = f'<p style="line-height: 1.3; font-size: 9pt;">'
|
html_content = f'<p style="line-height: 1.3; font-size: 9pt;">'
|
||||||
html_content += f"<b>Имя:</b> {html.escape(prefix_name)}<br>"
|
html_content += f"<b>Имя:</b> {html.escape(prefix_name)}<br>"
|
||||||
@@ -2397,8 +2407,13 @@ class WineHelperGUI(QMainWindow):
|
|||||||
html_content += "</p>"
|
html_content += "</p>"
|
||||||
self.prefix_info_display.setHtml(html_content)
|
self.prefix_info_display.setHtml(html_content)
|
||||||
|
|
||||||
def browse_for_prefix_installer(self):
|
def browse_and_run_prefix_installer(self):
|
||||||
"""Открывает диалог выбора файла для установки в созданный префикс."""
|
"""Открывает диалог выбора файла и запускает установку в созданный префикс."""
|
||||||
|
prefix_name = self.current_managed_prefix_name
|
||||||
|
if not prefix_name:
|
||||||
|
QMessageBox.warning(self, "Ошибка", "Сначала выберите префикс для установки.")
|
||||||
|
return
|
||||||
|
|
||||||
file_path, _ = QFileDialog.getOpenFileName(
|
file_path, _ = QFileDialog.getOpenFileName(
|
||||||
self,
|
self,
|
||||||
"Выберите установочный файл",
|
"Выберите установочный файл",
|
||||||
@@ -2406,18 +2421,11 @@ class WineHelperGUI(QMainWindow):
|
|||||||
"Исполняемые файлы (*.exe *.msi);;Все файлы (*)"
|
"Исполняемые файлы (*.exe *.msi);;Все файлы (*)"
|
||||||
)
|
)
|
||||||
if file_path:
|
if file_path:
|
||||||
self.prefix_install_path_edit.setText(file_path)
|
self.run_prefix_installer(file_path)
|
||||||
|
|
||||||
def update_prefix_install_button_state(self):
|
def run_prefix_installer(self, installer_path):
|
||||||
"""Обновляет состояние кнопки установки в префикс."""
|
"""Запускает установку файла в выбранный префикс через скрипт winehelper."""
|
||||||
path_ok = bool(self.prefix_install_path_edit.text().strip())
|
|
||||||
prefix_selected = self.current_managed_prefix_name is not None
|
|
||||||
self.prefix_install_button.setEnabled(path_ok and prefix_selected)
|
|
||||||
|
|
||||||
def run_prefix_installer(self):
|
|
||||||
"""Запускает установку файла в выбранный префикс."""
|
|
||||||
prefix_name = self.current_managed_prefix_name
|
prefix_name = self.current_managed_prefix_name
|
||||||
installer_path = self.prefix_install_path_edit.text().strip()
|
|
||||||
|
|
||||||
if not prefix_name:
|
if not prefix_name:
|
||||||
QMessageBox.warning(self, "Ошибка", "Не выбран префикс для установки.")
|
QMessageBox.warning(self, "Ошибка", "Не выбран префикс для установки.")
|
||||||
@@ -2426,9 +2434,6 @@ class WineHelperGUI(QMainWindow):
|
|||||||
QMessageBox.warning(self, "Ошибка", "Указан неверный путь к установочному файлу.")
|
QMessageBox.warning(self, "Ошибка", "Указан неверный путь к установочному файлу.")
|
||||||
return
|
return
|
||||||
|
|
||||||
prefix_path = os.path.join(Var.USER_WORK_PATH, "prefixes", prefix_name)
|
|
||||||
wine_executable = self._get_wine_executable_for_prefix(prefix_name)
|
|
||||||
|
|
||||||
self.command_dialog = QDialog(self)
|
self.command_dialog = QDialog(self)
|
||||||
self.command_dialog.setWindowTitle(f"Установка в префикс: {prefix_name}")
|
self.command_dialog.setWindowTitle(f"Установка в префикс: {prefix_name}")
|
||||||
self.command_dialog.setMinimumSize(750, 400)
|
self.command_dialog.setMinimumSize(750, 400)
|
||||||
@@ -2452,13 +2457,12 @@ class WineHelperGUI(QMainWindow):
|
|||||||
self.command_process.readyReadStandardOutput.connect(self._handle_command_output)
|
self.command_process.readyReadStandardOutput.connect(self._handle_command_output)
|
||||||
self.command_process.finished.connect(self._handle_prefix_install_finished)
|
self.command_process.finished.connect(self._handle_prefix_install_finished)
|
||||||
|
|
||||||
env = QProcessEnvironment.systemEnvironment()
|
# Окружение полностью настраивается скриптом winehelper
|
||||||
env.insert("WINEPREFIX", prefix_path)
|
self.command_process.setProcessEnvironment(QProcessEnvironment.systemEnvironment())
|
||||||
self.command_process.setProcessEnvironment(env)
|
|
||||||
|
|
||||||
args = [installer_path]
|
args = ["install-to-prefix", prefix_name, installer_path]
|
||||||
self.command_log_output.append(f"Запуск установки: {shlex.quote(wine_executable)} {shlex.quote(installer_path)}")
|
self.command_log_output.append(f"Выполнение: {shlex.quote(self.winehelper_path)} {' '.join(shlex.quote(a) for a in args)}")
|
||||||
self.command_process.start(wine_executable, args)
|
self.command_process.start(self.winehelper_path, args)
|
||||||
self.command_dialog.exec_()
|
self.command_dialog.exec_()
|
||||||
|
|
||||||
def _get_prefix_component_version(self, prefix_name, component_key):
|
def _get_prefix_component_version(self, prefix_name, component_key):
|
||||||
@@ -2966,10 +2970,6 @@ class WineHelperGUI(QMainWindow):
|
|||||||
if not self.management_container_groupbox.isVisible():
|
if not self.management_container_groupbox.isVisible():
|
||||||
self.management_container_groupbox.setVisible(True)
|
self.management_container_groupbox.setVisible(True)
|
||||||
|
|
||||||
QMessageBox.information(self, "Успех",
|
|
||||||
f"Префикс '{prefix_name}' успешно создан.\n"
|
|
||||||
"Теперь вы можете управлять им, выбрав его из выпадающего списка.")
|
|
||||||
|
|
||||||
def update_installed_apps(self):
|
def update_installed_apps(self):
|
||||||
"""Обновляет список установленных приложений в виде кнопок"""
|
"""Обновляет список установленных приложений в виде кнопок"""
|
||||||
# Если активная кнопка находится в списке удаляемых, сбрасываем ее
|
# Если активная кнопка находится в списке удаляемых, сбрасываем ее
|
||||||
@@ -3038,7 +3038,6 @@ class WineHelperGUI(QMainWindow):
|
|||||||
self.command_process.deleteLater()
|
self.command_process.deleteLater()
|
||||||
self.command_process = None
|
self.command_process = None
|
||||||
self.command_close_button.setEnabled(True)
|
self.command_close_button.setEnabled(True)
|
||||||
self.prefix_install_path_edit.clear()
|
|
||||||
self.update_installed_apps()
|
self.update_installed_apps()
|
||||||
|
|
||||||
def _set_active_button(self, button_widget):
|
def _set_active_button(self, button_widget):
|
||||||
@@ -3059,11 +3058,13 @@ class WineHelperGUI(QMainWindow):
|
|||||||
def show_installed_app_info(self, desktop_path, button_widget):
|
def show_installed_app_info(self, desktop_path, button_widget):
|
||||||
"""Показывает информацию об установленном приложении в правой панели."""
|
"""Показывает информацию об установленном приложении в правой панели."""
|
||||||
self._set_active_button(button_widget)
|
self._set_active_button(button_widget)
|
||||||
# Очищаем поле поиска и принудительно обновляем список, чтобы показать все приложения
|
# Если в поиске был текст, очищаем его и перерисовываем список.
|
||||||
self.installed_search_edit.blockSignals(True)
|
# Это предотвращает "прыжок", если список не был отфильтрован.
|
||||||
self.installed_search_edit.clear()
|
if self.installed_search_edit.text():
|
||||||
self.installed_search_edit.blockSignals(False)
|
self.installed_search_edit.blockSignals(True)
|
||||||
self.filter_installed_buttons()
|
self.installed_search_edit.clear()
|
||||||
|
self.installed_search_edit.blockSignals(False)
|
||||||
|
self.filter_installed_buttons()
|
||||||
|
|
||||||
# Прокручиваем к выбранному элементу
|
# Прокручиваем к выбранному элементу
|
||||||
frame = button_widget.parent()
|
frame = button_widget.parent()
|
||||||
@@ -3340,6 +3341,43 @@ class WineHelperGUI(QMainWindow):
|
|||||||
"Будет использована системная версия Wine.")
|
"Будет использована системная версия Wine.")
|
||||||
return 'wine' # По умолчанию системный wine
|
return 'wine' # По умолчанию системный wine
|
||||||
|
|
||||||
|
def update_sync_option(self, var_name, is_enabled):
|
||||||
|
"""Обновляет значение WINEESYNC или WINEFSYNC в last.conf."""
|
||||||
|
prefix_name = self.current_managed_prefix_name
|
||||||
|
if not prefix_name:
|
||||||
|
return
|
||||||
|
|
||||||
|
last_conf_path = os.path.join(Var.USER_WORK_PATH, "prefixes", prefix_name, "last.conf")
|
||||||
|
if not os.path.exists(last_conf_path):
|
||||||
|
QMessageBox.warning(self, "Ошибка", f"Файл last.conf не найден для префикса '{prefix_name}'.")
|
||||||
|
return
|
||||||
|
|
||||||
|
new_value = "1" if is_enabled else "0"
|
||||||
|
updated = False
|
||||||
|
lines = []
|
||||||
|
|
||||||
|
try:
|
||||||
|
with open(last_conf_path, 'r', encoding='utf-8') as f:
|
||||||
|
lines = f.readlines()
|
||||||
|
|
||||||
|
for i, line in enumerate(lines):
|
||||||
|
if line.strip().startswith(f"export {var_name}="):
|
||||||
|
lines[i] = f'export {var_name}="{new_value}"\n'
|
||||||
|
updated = True
|
||||||
|
break
|
||||||
|
|
||||||
|
if not updated:
|
||||||
|
lines.append(f'export {var_name}="{new_value}"\n')
|
||||||
|
|
||||||
|
with open(last_conf_path, 'w', encoding='utf-8') as f:
|
||||||
|
f.writelines(lines)
|
||||||
|
|
||||||
|
# Обновляем информационную панель, чтобы отразить изменения
|
||||||
|
self.update_prefix_info_display(prefix_name)
|
||||||
|
|
||||||
|
except IOError as e:
|
||||||
|
QMessageBox.critical(self, "Ошибка записи", f"Не удалось обновить файл last.conf:\n{e}")
|
||||||
|
|
||||||
def _run_wine_util(self, util_name, prefix_name=None):
|
def _run_wine_util(self, util_name, prefix_name=None):
|
||||||
"""Запускает стандартную утилиту Wine для выбранного префикса."""
|
"""Запускает стандартную утилиту Wine для выбранного префикса."""
|
||||||
if not prefix_name:
|
if not prefix_name:
|
||||||
@@ -3696,11 +3734,14 @@ class WineHelperGUI(QMainWindow):
|
|||||||
search_edit = tab_data['search_edit']
|
search_edit = tab_data['search_edit']
|
||||||
scroll_area = tab_data['scroll_area']
|
scroll_area = tab_data['scroll_area']
|
||||||
|
|
||||||
# Общая логика: очищаем поиск, обновляем список и прокручиваем к элементу
|
# Если в поиске был текст, очищаем его и перерисовываем список.
|
||||||
search_edit.blockSignals(True)
|
# Это предотвращает "прыжок", если список не был отфильтрован.
|
||||||
search_edit.clear()
|
if search_edit.text():
|
||||||
search_edit.blockSignals(False)
|
search_edit.blockSignals(True)
|
||||||
self.filter_buttons(tab_type)
|
search_edit.clear()
|
||||||
|
search_edit.blockSignals(False)
|
||||||
|
self.filter_buttons(tab_type)
|
||||||
|
|
||||||
frame = button_widget.parent()
|
frame = button_widget.parent()
|
||||||
if isinstance(frame, QFrame):
|
if isinstance(frame, QFrame):
|
||||||
QTimer.singleShot(0, lambda: scroll_area.ensureWidgetVisible(frame))
|
QTimer.singleShot(0, lambda: scroll_area.ensureWidgetVisible(frame))
|
||||||
@@ -4048,26 +4089,19 @@ class WineHelperGUI(QMainWindow):
|
|||||||
self._load_created_prefixes()
|
self._load_created_prefixes()
|
||||||
|
|
||||||
new_prefix_name = None
|
new_prefix_name = None
|
||||||
|
selected_new = False
|
||||||
if new_prefixes:
|
if new_prefixes:
|
||||||
# Обычно создается один префикс, берем первый из найденных
|
# Обычно создается один префикс, берем первый из найденных.
|
||||||
new_prefix_name = new_prefixes.pop()
|
new_prefix_name = new_prefixes.pop()
|
||||||
# Находим и выбираем его в выпадающем списке
|
# Находим и выбираем его в выпадающем списке.
|
||||||
index = self.created_prefix_selector.findText(new_prefix_name)
|
index = self.created_prefix_selector.findText(new_prefix_name)
|
||||||
if index != -1:
|
if index != -1:
|
||||||
self.created_prefix_selector.setCurrentIndex(index)
|
self.created_prefix_selector.setCurrentIndex(index)
|
||||||
# --- Конец обновления списка префиксов ---
|
selected_new = True
|
||||||
|
|
||||||
# Создаем кастомный диалог, чтобы кнопка была на русском
|
if not selected_new and self.created_prefix_selector.count() > 0:
|
||||||
success_box = QMessageBox(self.install_dialog)
|
self.created_prefix_selector.setCurrentIndex(0)
|
||||||
success_box.setWindowTitle("Успех")
|
# --- Конец обновления списка префиксов ---
|
||||||
title_name = self._get_current_app_title()
|
|
||||||
success_text = f"Программа «{title_name}» установлена успешно!"
|
|
||||||
if new_prefix_name:
|
|
||||||
success_text += f"\n\nНовый префикс '{new_prefix_name}' был автоматически выбран в списке управления на вкладке 'Менеджер префиксов'."
|
|
||||||
success_box.setText(success_text)
|
|
||||||
success_box.setIcon(QMessageBox.Information)
|
|
||||||
success_box.addButton("Готово", QMessageBox.AcceptRole)
|
|
||||||
success_box.exec_()
|
|
||||||
|
|
||||||
self.update_installed_apps()
|
self.update_installed_apps()
|
||||||
|
|
||||||
@@ -4168,7 +4202,6 @@ class WineHelperGUI(QMainWindow):
|
|||||||
"""Обрабатывает завершение создания ярлыка."""
|
"""Обрабатывает завершение создания ярлыка."""
|
||||||
self._handle_command_finished(exit_code, exit_status)
|
self._handle_command_finished(exit_code, exit_status)
|
||||||
if exit_code == 0:
|
if exit_code == 0:
|
||||||
QMessageBox.information(self, "Успех", "Ярлык успешно создан.")
|
|
||||||
self.update_installed_apps()
|
self.update_installed_apps()
|
||||||
# Переключаемся на вкладку "Установленные"
|
# Переключаемся на вкладку "Установленные"
|
||||||
for i in range(self.tab_bar.count()):
|
for i in range(self.tab_bar.count()):
|
||||||
|
Reference in New Issue
Block a user