feat: msi installer and cli command (#2020)

* feat: Add msi quite installer

* chore: update code for new wix

* feat: add cpack wix installer

* feat: add gihub workflow for msi

* chore: fix deploy script

* chore: add wix logs

* chore: fix msi build

* chore: fix msi build

* chore: add wix exts log

* chore: add cpackwixpatch for registering the service

* chore: fix build script

* chore: fix wix fragment

* feat: add closing app with reinstalling

* chore: update version for test

* chore: fix build script

* feat: added cli commands --connect and --import (#1967)

* fix: delete unused file and disable rollback after unsuccessful service start in msi installer

* fix: Add deps to msi

* fix: msi deps

* feat: added os signal handler

* fix: incorrect import at the empty client start (#2024)

* chore: add force quit for os signal handler

* feat: os signal handler improvements

* fix: fixed --connection command

---------

Co-authored-by: Mykola Baibuz <mykola.baibuz@gmail.com>
Co-authored-by: aiamnezia <ai@amnezia.org>
Co-authored-by: Mitternacht822 <sb@amnezia.org>
This commit is contained in:
vkamn
2025-12-11 18:54:24 +08:00
committed by GitHub
parent 5103bc640e
commit d669adb707
10 changed files with 280 additions and 31 deletions

View File

@@ -8,6 +8,21 @@ set PATH=%QT_BIN_DIR:"=%;%PATH%
echo "Using Qt in %QT_BIN_DIR%"
echo "Using QIF in %QIF_BIN_DIR%"
echo "Using WiX in %WIX_BIN_DIR%"
if "%WIX_BIN_DIR%"=="" (
echo "WIX_BIN_DIR is not set"
exit /b 1
)
set WIX_BIN_DIR_UNQUOTED=%WIX_BIN_DIR:"=%
set WIX_CLI=%WIX_BIN_DIR_UNQUOTED%\wix.exe
if not exist "%WIX_CLI%" (
echo "WiX CLI (wix.exe) was not found in %WIX_BIN_DIR%"
exit /b 1
)
REM Hold on to current directory
set PROJECT_DIR=%cd%
@@ -22,6 +37,8 @@ set PREBILT_DEPLOY_DATA_DIR=%PROJECT_DIR:"=%\client\3rd-prebuilt\deploy-prebuilt
set DEPLOY_DATA_DIR=%SCRIPT_DIR:"=%\data\windows\x%BUILD_ARCH:"=%
set INSTALLER_DATA_DIR=%WORK_DIR:"=%\installer\packages\%APP_DOMAIN:"=%\data
set TARGET_FILENAME=%PROJECT_DIR:"=%\%APP_NAME:"=%_x%BUILD_ARCH:"=%.exe
set TARGET_MSI_FILENAME=%PROJECT_DIR:"=%\%APP_NAME:"=%_x%BUILD_ARCH:"=%.msi
set STAGE_DIR=%WORK_DIR:"=%\stage
echo "Environment:"
echo "WORK_DIR: %WORK_DIR%"
@@ -32,10 +49,14 @@ echo "OUT_APP_DIR: %OUT_APP_DIR%"
echo "DEPLOY_DATA_DIR: %DEPLOY_DATA_DIR%"
echo "INSTALLER_DATA_DIR: %INSTALLER_DATA_DIR%"
echo "TARGET_FILENAME: %TARGET_FILENAME%"
echo "TARGET_MSI_FILENAME: %TARGET_MSI_FILENAME%"
echo "STAGE_DIR: %STAGE_DIR%"
echo "Cleanup..."
rmdir /Q /S %WORK_DIR%
del %TARGET_FILENAME%
del %TARGET_MSI_FILENAME%
rmdir /Q /S "%STAGE_DIR%"
mkdir %WORK_DIR%
@@ -56,6 +77,7 @@ mkdir "%OUT_APP_DIR%"
copy "%WORK_DIR%\service\server\release\%APP_NAME%-service.exe" "%OUT_APP_DIR%"
rem copy "%WORK_DIR%\client\%APP_FILENAME%" "%OUT_APP_DIR%"
copy /Y "%PROJECT_DIR%\client\images\app.ico" "%OUT_APP_DIR%\AmneziaVPN.ico" >nul
echo "Signing exe"
cd %OUT_APP_DIR%
@@ -89,5 +111,38 @@ timeout 5
cd %PROJECT_DIR%
signtool sign /v /n "Privacy Technologies OU" /fd sha256 /tr http://timestamp.comodoca.com/?td=sha256 /td sha256 "%TARGET_FILENAME%"
echo "Finished, see %TARGET_FILENAME%"
echo "Preparing staging directory for MSI..."
rmdir /Q /S "%STAGE_DIR%"
mkdir "%STAGE_DIR%"
xcopy "%OUT_APP_DIR%" "%STAGE_DIR%" /s /e /y /i /f >nul
echo "Building MSI via CPack..."
rmdir /Q /S "%WORK_DIR%\_CPack_Packages"
cd %WORK_DIR%
cpack -G WIX -C Release --config "%WORK_DIR%\CPackConfig.cmake"
if exist "%WORK_DIR%\_CPack_Packages\win64\WIX\wix.log" (
echo ---------------------------------------------
echo Contents of wix.log:
type "%WORK_DIR%\_CPack_Packages\win64\WIX\wix.log"
echo ---------------------------------------------
)
if %errorlevel% neq 0 exit /b %errorlevel%
set GENERATED_MSI=
for /f "delims=" %%i in ('dir /b /a:-d /o:-d "%WORK_DIR%\*.msi"') do (
if not defined GENERATED_MSI set GENERATED_MSI=%WORK_DIR%\%%i
)
if "%GENERATED_MSI%"=="" (
echo "Failed to locate generated MSI package"
exit /b 1
)
copy /Y "%GENERATED_MSI%" "%TARGET_MSI_FILENAME%"
if %errorlevel% neq 0 exit /b %errorlevel%
cd %PROJECT_DIR%
signtool sign /v /n "Privacy Technologies OU" /fd sha256 /tr http://timestamp.comodoca.com/?td=sha256 /td sha256 "%TARGET_MSI_FILENAME%"
echo "Finished, see %TARGET_FILENAME% and %TARGET_MSI_FILENAME%"
exit 0

View File

@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<CPackWiXPatch>
<CPackWiXFragment Id="#PRODUCT">
<!-- Требует расширение WixToolset.Util.wixext и xmlns util -->
<util:CloseApplication
Id="CloseAmneziaClient"
Target="AmneziaVPN.exe"
Description="Closing AmneziaVPN client"
TerminateProcess="1"
RebootPrompt="no" />
</CPackWiXFragment>
</CPackWiXPatch>

View File

@@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<CPackWiXPatch>
<CPackWiXFragment Id="CM_CP_AmneziaVPN_service.exe">
<ServiceInstall
Id="AmneziaServiceInstall"
Name="AmneziaVPN-service"
DisplayName="AmneziaVPN Service"
Description="Service for AmneziaVPN"
Start="auto"
Type="ownProcess"
ErrorControl="normal"
Vital="no">
<ServiceDependency Id="BFE" />
<ServiceDependency Id="nsi" />
</ServiceInstall>
<ServiceControl
Id="AmneziaServiceControl"
Name="AmneziaVPN-service"
Start="install"
Stop="both"
Remove="uninstall"
Wait="yes" />
</CPackWiXFragment>
</CPackWiXPatch>