Compare commits

...

13 Commits

Author SHA1 Message Date
yuejiajun
6f9010bbc7 安装包编译iss 2025-08-17 12:44:11 +08:00
yuejiajun
66de4ce4c4 实验构建初始化bat 2025-08-17 12:42:38 +08:00
yuejiajun
f9663b8e3f 实验系统,启动bat 2025-08-17 12:39:20 +08:00
yuejiajun
fc9108689f fixed: iss [base] redis 2025-08-17 12:38:09 +08:00
yuejiajun
ec815836fa fixed: iss [base] 安装完成后删除 template 文件 2025-08-17 12:37:05 +08:00
yuejiajun
d302a01b47 fixed: iss [base] 意外移除默认Path值 2025-08-17 04:32:18 +08:00
yuejiajun
17fa31fe78 import data 2025-08-17 04:31:42 +08:00
yuejiajun
32a0d9720c mysql template 2025-08-17 02:23:38 +08:00
yuejiajun
f1761fa2be 静默65001 2025-08-17 02:18:33 +08:00
yuejiajun
441b56f540 minio 2025-08-17 01:34:43 +08:00
yuejiajun
c99cc17536 mysql 2025-08-17 01:34:07 +08:00
yuejiajun
046da79838 minio 2025-08-17 01:30:45 +08:00
yuejiajun
076b1e6ef4 minio 2025-08-17 01:02:34 +08:00
39 changed files with 554 additions and 85 deletions

View File

@ -1 +1 @@
dev/public/test dev/public/test/prod/script

View File

@ -0,0 +1,6 @@
{"url":"http://192.168.1.103:9001/api/v1/service-account-credentials","accessKey":"lXSrqEcAVohPNXduJopS","secretKey":"QOGRA7J20DX4hkVZ9zxKzT2LIDyJVANDn50jR44r","api":"s3v4","path":"auto"}
{"url":"http://192.168.1.103:9001/api/v1/service-account-credentials","accessKey":"TS5qkfrzPWUMGAwpHMYZ","secretKey":"oMOGshNWfdWH9DwxnK5G9ZFfGIUuwrNjvQ2glKbP","api":"s3v4","path":"auto"}
{"url":"http://192.168.1.103:9001/api/v1/service-account-credentials","accessKey":"H9Ttfrb5cyvWhpmfWJZE","secretKey":"bScymo0XStmWbg2ESWzaWDKxljfMBwGttfEJgabb","api":"s3v4","path":"auto"}
{"url":"http://192.168.1.103:9001/api/v1/service-account-credentials","accessKey":"G5PoLrqEkU6GcLgFJmpi","secretKey":"TikSw6F3BAezJhFZOBTaoK0kqjihID4jDfXI6Wyr","api":"s3v4","path":"auto"}
{"url":"http://192.168.1.103:9001/api/v1/service-account-credentials","accessKey":"d4aYukalXedyXxkzG9GG","secretKey":"ZwUnm4YcnNdOMJSxnaY8gnHUjCN367C3fVaDxCnm","api":"s3v4","path":"auto"}
{"url":"http://192.168.1.103:9001/api/v1/service-account-credentials","accessKey":"V8UDKIII9ynU6MPGteUZ","secretKey":"AG97879uLMpfYxOYfcTyfAqyCEE9Lx63QNRQLseP","api":"s3v4","path":"auto"}

View File

@ -3,3 +3,4 @@ TS5qkfrzPWUMGAwpHMYZ/oMOGshNWfdWH9DwxnK5G9ZFfGIUuwrNjvQ2glKbP
H9Ttfrb5cyvWhpmfWJZE/bScymo0XStmWbg2ESWzaWDKxljfMBwGttfEJgabb H9Ttfrb5cyvWhpmfWJZE/bScymo0XStmWbg2ESWzaWDKxljfMBwGttfEJgabb
G5PoLrqEkU6GcLgFJmpi/TikSw6F3BAezJhFZOBTaoK0kqjihID4jDfXI6Wyr G5PoLrqEkU6GcLgFJmpi/TikSw6F3BAezJhFZOBTaoK0kqjihID4jDfXI6Wyr
d4aYukalXedyXxkzG9GG/ZwUnm4YcnNdOMJSxnaY8gnHUjCN367C3fVaDxCnm d4aYukalXedyXxkzG9GG/ZwUnm4YcnNdOMJSxnaY8gnHUjCN367C3fVaDxCnm
V8UDKIII9ynU6MPGteUZ/AG97879uLMpfYxOYfcTyfAqyCEE9Lx63QNRQLseP

View File

@ -1 +1 @@
{"version":"1","format":"xl-single","id":"970d54f5-cd3a-4ba7-9555-842c26c4ea8c","xl":{"version":"3","this":"8cf766e8-1cac-4207-bab4-578c892b6500","sets":[["8cf766e8-1cac-4207-bab4-578c892b6500"]],"distributionAlgo":"SIPMOD+PARITY"}} {"version":"1","format":"xl-single","id":"3c817b22-670f-444e-9758-176660256085","xl":{"version":"3","this":"af4a619d-76c7-4025-9beb-b16ebe59fd41","sets":[["af4a619d-76c7-4025-9beb-b16ebe59fd41"]],"distributionAlgo":"SIPMOD+PARITY"}}

View File

@ -1,5 +1,5 @@
@echo off @echo off
chcp 65001 chcp 65001 >nul
title MinIO Quick Start title MinIO Quick Start
set MINIO_EXE=minio.exe set MINIO_EXE=minio.exe

View File

@ -1,29 +1,77 @@
@echo off @echo off
setlocal enabledelayedexpansion setlocal enabledelayedexpansion
chcp 65001 >nul
title Import Data Into MySQL
:: MySQL 连接配置 :: MySQL connection configuration
set MYSQL_HOST=127.0.0.1 set MYSQL_HOST=127.0.0.1
set MYSQL_PORT=33306 set MYSQL_PORT=33306
set MYSQL_USER=root set MYSQL_USER=root
set MYSQL_PASS=Root@2025 set MYSQL_PASS=Root@2025
set MYSQL_EXE=mysql.exe
:: 脚本目录 :: Script directory
set SCRIPTS_DIR=script set SCRIPTS_DIR=script
:: 遍历 script 目录下的所有文件夹 :: 1. Check if mysql.exe exists
for /d %%D in ("%SCRIPTS_DIR%\*") do ( where %MYSQL_EXE% >nul 2>&1
set "folder=%%~nxD" if %errorLevel% neq 0 (
echo 正在处理数据库: !folder! echo Error: mysql.exe not found in PATH
pause
:: 创建数据库(如果不存在) exit /b 1
mysql -h %MYSQL_HOST% -P %MYSQL_PORT% -u %MYSQL_USER% -p%MYSQL_PASS% -e "CREATE DATABASE IF NOT EXISTS `!folder!`;"
:: 遍历当前文件夹中的所有.sql文件
for %%F in ("%%D\*.sql") do (
echo 正在导入文件: %%~nxF 到数据库 !folder!
mysql -h %MYSQL_HOST% -P %MYSQL_PORT% -u %MYSQL_USER% -p%MYSQL_PASS% !folder! < "%%F"
)
) )
echo 所有SQL文件导入完成 :: 2. Check if scripts directory exists
if not exist "%SCRIPTS_DIR%" (
echo Error: Scripts directory not found at %SCRIPTS_DIR%
pause
exit /b 1
)
:: 3. Verify MySQL connection
echo Testing MySQL connection...
%MYSQL_EXE% -h %MYSQL_HOST% -P %MYSQL_PORT% -u %MYSQL_USER% -p%MYSQL_PASS% -e "SELECT 1" >nul 2>&1
if %errorLevel% neq 0 (
echo Error: Failed to connect to MySQL server
echo Please verify your connection parameters:
echo Host: %MYSQL_HOST%
echo Port: %MYSQL_PORT%
echo User: %MYSQL_USER%
pause
exit /b 1
)
echo MySQL connection successful. Starting import process...
:: Process all folders in the scripts directory
for /d %%D in ("%SCRIPTS_DIR%\*") do (
set "folder=%%~nxD"
echo Processing database: !folder!
:: Create database (if not exists)
echo Creating database '!folder!' if not exists...
%MYSQL_EXE% -h %MYSQL_HOST% -P %MYSQL_PORT% -u %MYSQL_USER% -p%MYSQL_PASS% -e "CREATE DATABASE IF NOT EXISTS `!folder!`;"
if %errorLevel% neq 0 (
echo Error: Failed to create database '!folder!'
pause
exit /b 1
)
:: Process all .sql files in the current folder
for %%F in ("%%D\*.sql") do (
echo Importing file: %%~nxF into database !folder!
%MYSQL_EXE% -h %MYSQL_HOST% -P %MYSQL_PORT% -u %MYSQL_USER% -p%MYSQL_PASS% !folder! < "%%F"
if %errorLevel% neq 0 (
echo Error: Failed to import file %%~nxF
pause
exit /b 1
)
)
echo Completed processing database: !folder!
echo ----------------------------------------
)
echo All SQL files imported successfully!
pause pause

View File

@ -1,16 +1,17 @@
@echo off @echo off
chcp 65001
setlocal enabledelayedexpansion setlocal enabledelayedexpansion
chcp 65001 >nul
title Initialize And Startup MySQL
:: 检查是否以管理员身份运行 :: Check if running as administrator
net session >nul 2>&1 net session >nul 2>&1
if %errorLevel% neq 0 ( if %errorLevel% neq 0 (
echo 请使用管理员身份运行此脚本! echo Please run this script as Administrator!
pause pause
exit /b 1 exit /b 1
) )
:: 配置参数 - 根据你的环境修改这些值 :: Configuration parameters - modify these values according to your environment
set "MYSQL_HOME=%INSTALLPATH%" set "MYSQL_HOME=%INSTALLPATH%"
set "MYSQL_BIN_PATH=%INSTALLPATH%\bin" set "MYSQL_BIN_PATH=%INSTALLPATH%\bin"
set "MYSQLD_PATH=%INSTALLPATH%\bin\mysqld.exe" set "MYSQLD_PATH=%INSTALLPATH%\bin\mysqld.exe"
@ -19,43 +20,95 @@ set "SERVICE_NAME=x_database"
set "NEW_ROOT_PASSWORD=Root@2025" set "NEW_ROOT_PASSWORD=Root@2025"
set "DATA_DIR=%INSTALLPATH%\data" set "DATA_DIR=%INSTALLPATH%\data"
:: 1. 初始化MySQL :: 1. Check if mysqld.exe exists
echo [1/4] 正在初始化MySQL... if not exist "%MYSQLD_PATH%" (
:: "%MYSQL_BIN_PATH%\mysqld" --defaults-file="%MY_INI_PATH%" --initialize-insecure --basedir="%MYSQL_BIN_PATH%\.." --datadir="%DATA_DIR%" echo Error: mysqld.exe not found at %MYSQLD_PATH%
pause
exit /b 1
)
:: 2. Check if my.ini exists
if not exist "%MY_INI_PATH%" (
echo Error: Configuration file my.ini not found at %MY_INI_PATH%
pause
exit /b 1
)
:: 3. Check if service already exists
sc query "%SERVICE_NAME%" >nul 2>&1
if %errorLevel% equ 0 (
echo Error: Service [%SERVICE_NAME%] already exists
pause
exit /b 1
)
echo "%DATA_DIR%"
if exist "%DATA_DIR%" (
set "isEmpty=true"
dir /a /b "%DATA_DIR%\*" 2>nul | findstr . >nul && set "isEmpty=false"
dir /ad /b "%DATA_DIR%\*" 2>nul | findstr . >nul && set "isEmpty=false"
if "!isEmpty!"=="false" (
echo Please empty the data directory first
pause
exit /b 1
) else (
echo Initialization conditions met
)
) else (
echo Initialization conditions met. Proceed with initialization?
choice /c yn /m "Enter your choice (Y/N): "
if errorlevel 2 (
echo User chose not to initialize. Exiting...
exit /b 0
) else (
echo Initializing directory...
mkdir "%DATA_DIR%"
if exist "%DATA_DIR%" (
echo Directory initialized successfully
) else (
echo Failed to initialize directory
pause
exit /b 1
)
)
)
:: 1. Initialize MySQL
echo [1/4] Initializing MySQL...
"%MYSQL_BIN_PATH%\mysqld" --defaults-file="%MY_INI_PATH%" --initialize-insecure --basedir="%MYSQL_HOME%" --datadir="%DATA_DIR%" "%MYSQL_BIN_PATH%\mysqld" --defaults-file="%MY_INI_PATH%" --initialize-insecure --basedir="%MYSQL_HOME%" --datadir="%DATA_DIR%"
if errorlevel 1 ( if errorlevel 1 (
echo 初始化失败 echo Initialization failed
exit /b 1 exit /b 1
) )
:: 2. 注册MySQL服务 :: 2. Register MySQL service
echo [2/4] 正在注册MySQL服务[%SERVICE_NAME%]... echo [2/4] Registering MySQL service [%SERVICE_NAME%]...
"%MYSQL_BIN_PATH%\mysqld" --install "%SERVICE_NAME%" --defaults-file="%MY_INI_PATH%" "%MYSQL_BIN_PATH%\mysqld" --install "%SERVICE_NAME%" --defaults-file="%MY_INI_PATH%"
if errorlevel 1 ( if errorlevel 1 (
echo 服务注册失败 echo Service registration failed
exit /b 1 exit /b 1
) )
:: 3. 启动MySQL服务 :: 3. Start MySQL service
echo [3/4] 正在启动MySQL服务[%SERVICE_NAME%]... echo [3/4] Starting MySQL service [%SERVICE_NAME%]...
net start "%SERVICE_NAME%" net start "%SERVICE_NAME%"
if errorlevel 1 ( if errorlevel 1 (
echo 服务启动失败 echo Service startup failed
exit /b 1 exit /b 1
) )
:: 4. 修改root密码 :: 4. Change root password
echo [4/4] 正在修改root密码... echo [4/4] Changing root password...
"%MYSQL_BIN_PATH%\mysql" -u root --skip-password -e "ALTER USER 'root'@'localhost' IDENTIFIED BY '%NEW_ROOT_PASSWORD%'; FLUSH PRIVILEGES;" "%MYSQL_BIN_PATH%\mysql" -u root --skip-password -e "ALTER USER 'root'@'localhost' IDENTIFIED BY '%NEW_ROOT_PASSWORD%'; FLUSH PRIVILEGES;"
if errorlevel 1 ( if errorlevel 1 (
echo 密码修改失败 echo Password change failed
exit /b 1 exit /b 1
) )
echo MySQL已成功初始化并配置! echo MySQL successfully initialized and configured!
echo 服务名称: %SERVICE_NAME% echo Service name: %SERVICE_NAME%
echo Root新密码: %NEW_ROOT_PASSWORD% echo New root password: %NEW_ROOT_PASSWORD%
echo my.ini路径: %MY_INI_PATH% echo my.ini path: %MY_INI_PATH%
pause pause
endlocal endlocal

View File

@ -1,50 +1,76 @@
@echo off @echo off
chcp 65001
setlocal enabledelayedexpansion setlocal enabledelayedexpansion
chcp 65001 >nul
title Register MySQL Service
:: 检查是否以管理员身份运行 :: Check if running as administrator
net session >nul 2>&1 net session >nul 2>&1
if %errorLevel% neq 0 ( if %errorLevel% neq 0 (
echo 请使用管理员身份运行此脚本! echo Please run this script as Administrator!
pause pause
exit /b 1 exit /b 1
) )
:: Configuration parameters
set "SERVICE_NAME=x_database" set "SERVICE_NAME=x_database"
set "MYSQLD_PATH=mysqld.exe"
set "MY_INI_PATH=%INSTALLPATH%\my.ini"
:: 1. 停止并删除现有MySQL服务 :: Verify mysqld.exe exists
echo 正在停止MySQL服务[%SERVICE_NAME%]... where %MYSQLD_PATH% >nul 2>&1
if %errorLevel% neq 0 (
echo Error: mysqld.exe not found in PATH
pause
exit /b 1
)
:: Verify my.ini exists
if not exist "%MY_INI_PATH%" (
echo Error: Configuration file not found at %MY_INI_PATH%
pause
exit /b 1
)
:: 1. Stop and remove existing MySQL service
echo Stopping MySQL service [%SERVICE_NAME%]...
net stop %SERVICE_NAME% >nul 2>&1 net stop %SERVICE_NAME% >nul 2>&1
echo 正在删除已有的MySQL服务[%SERVICE_NAME%]... echo Removing existing MySQL service [%SERVICE_NAME%]...
sc delete %SERVICE_NAME% >nul 2>&1 sc query %SERVICE_NAME% >nul 2>&1
if %errorLevel% equ 0 ( if %errorLevel% equ 0 (
echo [成功] MySQL服务[%SERVICE_NAME%]已删除 sc delete %SERVICE_NAME% >nul 2>&1
if %errorLevel% equ 0 (
echo [Success] MySQL service [%SERVICE_NAME%] removed
) else (
echo [Error] Failed to remove MySQL service [%SERVICE_NAME%]
pause
exit /b 1
)
) else ( ) else (
echo [警告] 删除MySQL服务[%SERVICE_NAME%]失败(可能服务不存在) echo [Info] MySQL service [%SERVICE_NAME%] does not exist (no action needed)
) )
:: 2. 安装MySQL服务 :: 2. Install MySQL service
echo 正在安装MySQL服务[%SERVICE_NAME%]... echo Installing MySQL service [%SERVICE_NAME%]...
mysqld --install %SERVICE_NAME% --defaults-file="%INSTALLPATH%\my.ini" %MYSQLD_PATH% --install %SERVICE_NAME% --defaults-file="%MY_INI_PATH%"
if %errorLevel% equ 0 ( if %errorLevel% equ 0 (
echo [成功] MySQL服务[%SERVICE_NAME%]安装完成 echo [Success] MySQL service [%SERVICE_NAME%] installed
) else ( ) else (
echo [错误] MySQL服务[%SERVICE_NAME%]安装失败 echo [Error] Failed to install MySQL service [%SERVICE_NAME%]
pause pause
exit /b 1 exit /b 1
) )
:: 3. 启动MySQL服务 :: 3. Start MySQL service
echo 正在启动MySQL服务[%SERVICE_NAME%]... echo Starting MySQL service [%SERVICE_NAME%]...
net start %SERVICE_NAME% net start %SERVICE_NAME%
if %errorLevel% equ 0 ( if %errorLevel% equ 0 (
echo [成功] MySQL服务[%SERVICE_NAME%]已启动 echo [Success] MySQL service [%SERVICE_NAME%] started
) else ( ) else (
echo [错误] MySQL服务[%SERVICE_NAME%]启动失败 echo [Error] Failed to start MySQL service [%SERVICE_NAME%]
pause pause
exit /b 1 exit /b 1
) )
echo 所有操作已完成! echo All operations completed successfully!
pause pause

View File

@ -1,9 +1,11 @@
@echo on @echo off
chcp 65001 >nul
tital Install Redis Server
:: 检查是否以管理员身份运行 :: 检查是否以管理员身份运行
net session >nul 2>&1 net session >nul 2>&1
if %errorLevel% neq 0 ( if %errorLevel% neq 0 (
echo 请使用管理员身份运行此脚本! echo Please run this script as Administrator!
pause pause
exit /b 1 exit /b 1
) )

View File

@ -1,6 +1,6 @@
@echo off @echo off
setlocal enabledelayedexpansion setlocal enabledelayedexpansion
chcp 65001 chcp 65001 >nul
title RocketMQ 5.x Quick Start (with Proxy) title RocketMQ 5.x Quick Start (with Proxy)
:: 1. 检查 ROCKETMQ_HOME 是否存在 :: 1. 检查 ROCKETMQ_HOME 是否存在

View File

@ -62,30 +62,40 @@ Name: "Chinese"; MessagesFile: "compiler:Languages\Chinese.isl";
;Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked ;Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
;; 程序 ICO
[Icons]
;Name: "{autoprograms}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}.exe"
;Name: "{autodesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}.exe"; Tasks: desktopicon
;; 组件安装方式 ;; 组件安装方式
[Types] [Types]
Name: "full"; Description: "完整组件安装"; Name: "full"; Description: "完整组件安装";
Name: "mini"; Description: "最小安装"; Name: "mini"; Description: "最小安装";
;; ============================================== 自定义组件 必须启用 iscustom 作为 Flags ==============================================
; iscustom 开启自定义选项 ; iscustom 开启自定义选项
Name: "custom"; Description: "自定义组件安装"; Flags: iscustom; Name: "custom"; Description: "自定义组件安装"; Flags: iscustom;
;; 组件列表选择项 ;; 组件列表选择项
[Components] [Components]
;; ============================================== 自定义组件的 Types 可以不参与任何固定式 ==============================================
Name: "MainApp"; Description: "{#MyAppName}主程序"; Types: full mini; Flags: checkablealone; Name: "MainApp"; Description: "{#MyAppName}主程序"; Types: full mini; Flags: checkablealone;
Name: "JDK"; Description: "JDK程序"; Types: full custom; Flags: checkablealone; Name: "JDK"; Description: "JDK程序"; Types: full; Flags: checkablealone;
Name: "Redis"; Description: "Redis程序"; Types: full custom; Flags: checkablealone; Name: "Redis"; Description: "Redis程序"; Types: full; Flags: checkablealone;
Name: "MinIO"; Description: "MinIO程序"; Types: full custom; Flags: checkablealone; Name: "MinIO"; Description: "MinIO程序"; Types: full; Flags: checkablealone;
Name: "RocketMQ"; Description: "RocketMQ程序"; Types: full custom; Flags: checkablealone; Name: "RocketMQ"; Description: "RocketMQ程序"; Types: full; Flags: checkablealone;
Name: "Nginx"; Description: "Nginx程序"; Types: full custom; Flags: checkablealone; Name: "Nginx"; Description: "Nginx程序"; Types: full; Flags: checkablealone;
Name: "MySQL"; Description: "MySQL程序"; Types: full custom; Flags: checkablealone; Name: "MySQL"; Description: "MySQL程序"; Types: full; Flags: checkablealone;
;; 引入文件列表 ;; 引入文件列表
[Files] [Files]
;; ============================================== 共享文件 禁止使用 ignoreversion 作为 Flags ==============================================
;; Readme ;; Readme
; 安装完的 readme 信息 ; 安装完的 readme 信息
Source: "Resources\Readme.md"; DestDir: "{app}"; Flags: isreadme; ;Source: "Resources\Readme.md"; DestDir: "{app}"; Flags: isreadme;
;; 文件 ;; 文件
Source: "Resources\grep.exe"; DestDir: "{app}\usr"; DestName: "grep.exe"; Flags: ignoreversion; Components: MainApp; Source: "Resources\grep.exe"; DestDir: "{app}\usr"; DestName: "grep.exe"; Flags: ignoreversion; Components: MainApp;
;; 文件夹 ;; 文件夹
@ -107,17 +117,19 @@ Name: "{app}\nginx\dist"; Permissions: users-modify; Components: Nginx;
;; 安装前后删除文件 ;; 安装前后删除文件
[InstallDelete] [InstallDelete]
Type: files; Name: "{app}\mysql\template*.bat"; ;Type: files; Name: "{app}\mysql\template.ini";
Type: files; Name: "{app}\mysql\start-mysql-demo.bat"; ;Type: files; Name: "{app}\mysql\template-initialize-and-start-mysql.bat";
Type: files; Name: "{app}\mysql\template.ini"; ;Type: files; Name: "{app}\mysql\template-register-mysql-with-data.bat";
;; 安装时注册表与环境变量列表 ;; 安装时注册表与环境变量列表
[Registry] [Registry]
;; 写入普通注册表项
; uninsdeletevalue 卸载时删除值 ; uninsdeletevalue 卸载时删除值
; uninsdeletekey 卸载时删除键 ; uninsdeletekey 卸载时删除键
; preservestringtype 保留原值类型 ; preservestringtype 保留原值类型
;; ============================================== Path 禁止使用任何 *delete*、*remove* 作为 Flags 运行 ==============================================
;; 写入普通注册表项
Root: HKLM; Subkey: "Software\X\Command"; ValueType: string; ValueName: "InstallPath"; ValueData: "{app}"; Flags: uninsdeletevalue ; Root: HKLM; Subkey: "Software\X\Command"; ValueType: string; ValueName: "InstallPath"; ValueData: "{app}"; Flags: uninsdeletevalue ;
Root: HKLM; Subkey: "Software\X\Command"; ValueType: string; ValueName: "Version"; ValueData: "{#SetupSetting("AppVersion")}"; Flags: uninsdeletevalue ; Root: HKLM; Subkey: "Software\X\Command"; ValueType: string; ValueName: "Version"; ValueData: "{#SetupSetting("AppVersion")}"; Flags: uninsdeletevalue ;
@ -131,7 +143,7 @@ Root: HKA; Subkey: "Software\Classes\{#MyAppAssocKey}\shell\open\command"; Value
Root: HKLM; Subkey: "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"; ValueType: string; AfterInstall: RefreshEnvironment; Components: MainApp; \ Root: HKLM; Subkey: "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"; ValueType: string; AfterInstall: RefreshEnvironment; Components: MainApp; \
ValueName: "X_COMMAND"; ValueData: "{app}"; Flags: uninsdeletevalue ; ValueName: "X_COMMAND"; ValueData: "{app}"; Flags: uninsdeletevalue ;
Root: HKLM; Subkey: "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"; ValueType: expandsz; AfterInstall: RefreshEnvironment; Components: MainApp; \ Root: HKLM; Subkey: "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"; ValueType: expandsz; AfterInstall: RefreshEnvironment; Components: MainApp; \
ValueName: "Path"; ValueData: "{olddata};%X_COMMAND%\usr"; Check: NeedsAddPath('%X_COMMAND%\usr'); Flags: uninsdeletevalue ; ValueName: "Path"; ValueData: "{olddata};%X_COMMAND%\usr"; Check: NeedsAddPath('%X_COMMAND%\usr'); Flags: preservestringtype ;
@ -147,19 +159,19 @@ Root: HKLM; Subkey: "SYSTEM\CurrentControlSet\Control\Session Manager\Environmen
;; 【Redis】追加到 PATH 变量 ;; 【Redis】追加到 PATH 变量
Root: HKLM; Subkey: "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"; ValueType: expandsz; AfterInstall: RefreshEnvironment; Components: Redis; \ Root: HKLM; Subkey: "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"; ValueType: expandsz; AfterInstall: RefreshEnvironment; Components: Redis; \
ValueName: "Path"; ValueData: "{olddata};%X_COMMAND%\redis"; Check: NeedsAddPath('%X_COMMAND%\redis'); Flags: uninsdeletevalue ; ValueName: "Path"; ValueData: "{olddata};%X_COMMAND%\redis"; Check: NeedsAddPath('%X_COMMAND%\redis'); Flags: preservestringtype ;
;; 【MinIO】追加到 PATH 变量 ;; 【MinIO】追加到 PATH 变量
Root: HKLM; Subkey: "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"; ValueType: expandsz; AfterInstall: RefreshEnvironment; Components: MinIO; \ Root: HKLM; Subkey: "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"; ValueType: expandsz; AfterInstall: RefreshEnvironment; Components: MinIO; \
ValueName: "Path"; ValueData: "{olddata};%X_COMMAND%\io"; Check: NeedsAddPath('%X_COMMAND%\io'); Flags: uninsdeletevalue ; ValueName: "Path"; ValueData: "{olddata};%X_COMMAND%\io"; Check: NeedsAddPath('%X_COMMAND%\io'); Flags: preservestringtype ;
;; 【Nginx】追加到 PATH 变量 ;; 【Nginx】追加到 PATH 变量
Root: HKLM; Subkey: "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"; ValueType: expandsz; AfterInstall: RefreshEnvironment; Components: Nginx; \ Root: HKLM; Subkey: "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"; ValueType: expandsz; AfterInstall: RefreshEnvironment; Components: Nginx; \
ValueName: "Path"; ValueData: "{olddata};%X_COMMAND%\nginx"; Check: NeedsAddPath('%X_COMMAND%\nginx'); Flags: uninsdeletevalue ; ValueName: "Path"; ValueData: "{olddata};%X_COMMAND%\nginx"; Check: NeedsAddPath('%X_COMMAND%\nginx'); Flags: preservestringtype ;
@ -169,18 +181,18 @@ Root: HKLM; Subkey: "SYSTEM\CurrentControlSet\Control\Session Manager\Environmen
Root: HKLM; Subkey: "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"; ValueType: string; AfterInstall: RefreshEnvironment; Components: RocketMQ; \ Root: HKLM; Subkey: "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"; ValueType: string; AfterInstall: RefreshEnvironment; Components: RocketMQ; \
ValueName: "ROCKETMQ_SBIN"; ValueData: "{app}\rocketmq\sbin"; Flags: uninsdeletevalue ; ValueName: "ROCKETMQ_SBIN"; ValueData: "{app}\rocketmq\sbin"; Flags: uninsdeletevalue ;
Root: HKLM; Subkey: "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"; ValueType: expandsz; AfterInstall: RefreshEnvironment; Components: RocketMQ; \ Root: HKLM; Subkey: "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"; ValueType: expandsz; AfterInstall: RefreshEnvironment; Components: RocketMQ; \
ValueName: "Path"; ValueData: "{olddata};%ROCKETMQ_SBIN%"; Check: NeedsAddPath('%ROCKETMQ_SBIN%'); Flags: uninsdeletevalue ; ValueName: "Path"; ValueData: "{olddata};%ROCKETMQ_SBIN%"; Check: NeedsAddPath('%ROCKETMQ_SBIN%'); Flags: preservestringtype ;
;; 【MySQL】环境变量【注册服务使用】 ;; 【MySQL】环境变量【注册服务使用】
; 数据库服务注册后服务名 ; 数据库服务注册后服务名
Root: HKLM; Subkey: "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"; ValueType: string; AfterInstall: RefreshEnvironment; Components: MySQL; \ ;Root: HKLM; Subkey: "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"; ValueType: string; AfterInstall: RefreshEnvironment; Components: MySQL; \
ValueName: "X_MANAGE_DB_SC"; ValueData: "x_database"; Flags: uninsdeletevalue ; ValueName: "X_MANAGE_DB_SC"; ValueData: "x_database"; Flags: uninsdeletevalue ;
; 这两个值,将作为后续判断程序是否已经安装做依据 ; 这两个值,将作为后续判断程序是否已经安装做依据
Root: HKLM; Subkey: "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"; ValueType: string; AfterInstall: RefreshEnvironment; Components: MySQL; \ ;Root: HKLM; Subkey: "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"; ValueType: string; AfterInstall: RefreshEnvironment; Components: MySQL; \
ValueName: "X_MANAGE_DB_EXE"; ValueData: "{app}\mysql\bin\mysqld.exe"; Flags: uninsdeletevalue ; ValueName: "X_MANAGE_DB_EXE"; ValueData: "{app}\mysql\bin\mysqld.exe"; Flags: uninsdeletevalue ;
Root: HKLM; Subkey: "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"; ValueType: string; AfterInstall: RefreshEnvironment; Components: MySQL; \ ;Root: HKLM; Subkey: "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"; ValueType: string; AfterInstall: RefreshEnvironment; Components: MySQL; \
ValueName: "X_MANAGE_DB_COF"; ValueData: "{app}\mysql\my.ini"; Flags: uninsdeletevalue ; ValueName: "X_MANAGE_DB_COF"; ValueData: "{app}\mysql\my.ini"; Flags: uninsdeletevalue ;
; MySQL【通用服务】导入脚本数据使用 ; MySQL【通用服务】导入脚本数据使用
@ -399,13 +411,19 @@ end;
// 在安装完成后执行 // 在安装完成后执行
procedure CurStepChanged(CurStep: TSetupStep); procedure CurStepChanged(CurStep: TSetupStep);
begin begin
// 仅在安装完成后执行
if CurStep = ssPostInstall then if CurStep = ssPostInstall then
begin begin
CreateConfigFromTemplate; CreateConfigFromTemplate;
// if UsingWinNT then if FileExists(ExpandConstant('{app}\mysql\template.ini')) then
// Exec('cmd.exe', '/C cmd', '', SW_HIDE, ewWaitUntilTerminated, ResultCode); DeleteFile(ExpandConstant('{app}\mysql\template.ini'));
if FileExists(ExpandConstant('{app}\mysql\template-initialize-and-start-mysql.bat')) then
DelTree(ExpandConstant('{app}\mysql\template-initialize-and-start-mysql.bat'), False, True, False);
if FileExists(ExpandConstant('{app}\mysql\template-register-mysql-with-data.bat')) then
DelTree(ExpandConstant('{app}\mysql\template-register-mysql-with-data.bat'), False, True, False);
end; end;
end; end;

View File

View File

@ -0,0 +1,18 @@
@echo off
chcp 65001 >nul
title Simulation Quick Start
if exist "%SIMULATION_MANAGE_BIN%" (
start "Simulation Server" cmd /k "chcp 65001 && title Simulation Server && java -Dspring.profiles.active=test,mysql,redis,rocketmq,springdoc %SIMULATION_VM_PARAMS% -jar %SIMULATION_MANAGE_BIN%"
)
if exist "%SIMULATION_MANAGE_BIN%" (
cd %SIMULATION_MAIN%\web
start "Simulation Website" cmd /k "title Simulation Website && simulation-web.exe -c conf/web.conf"
)
echo Simulation:
echo - SimulationServer (Port: 28280)
echo - SimulationWebsite (Port: 18280)
pause

View File

@ -0,0 +1,271 @@
;iss
#define MyAppName "仿真实验"
#define MyAppVersion "v1.0.0"
#define MyAppPublisher "X"
#define MyAppURL "~"
#define MyAppExeName "simulation"
#define MyAppAssocName MyAppName + " File"
#define MyAppAssocExt ".myp"
#define MyAppAssocKey StringChange(MyAppAssocName, " ", "") + MyAppAssocExt
; 默认配置
[Setup]
AppId={{550E8400-E29B-41D4-A716-446655440000}
; 默认安装路径
DefaultDirName={localappdata}\XManage
; 安装密码
Password=20250813
; 是否加密
Encryption=yes
; ICO图标
;SetupIconFile=Resources\icon.ico
;UninstallDisplayIcon={app}\{#MyAppExeName}.exe
VersionInfoProductVersion=1.0.0
VersionInfoCompany=
VersionInfoDescription=仿真实验服务
VersionInfoCopyright=CopyRight © 2025
VersionInfoProductName=仿真实验
; 默认配置
AppName={#MyAppName}
AppVersion={#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
ChangesAssociations=yes
DisableDirPage=no
DisableProgramGroupPage=yes
Compression=lzma2
SolidCompression=yes
WizardStyle=modern
ChangesEnvironment=yes
PrivilegesRequired=admin
ArchitecturesAllowed=x64compatible
ArchitecturesInstallIn64BitMode=x64compatible
OutputDir=Release\
OutputBaseFilename=SimulationSetup-{#MyAppVersion}
UninstallFilesDir={app}\{#MyAppExeName}
UninstallDisplayIcon={app}\{#MyAppExeName}\{#MyAppExeName}.bat
; 语言选择
[Languages]
Name: "Chinese"; MessagesFile: "compiler:Languages\Chinese.isl"
;; 任务
[Tasks]
; 是否创建桌面图标
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
;; 组件安装方式
[Types]
; 完整安装所有组件
Name: full; Description: 完整组件安装;
Name: "mini"; Description: "最小安装";
; 自定义安装
Name: custom; Description: 自定义安装; Flags: iscustom
;; 组件列表选择项
[Components]
Name: Starter; Description: {#MyAppName} 启动; Types: full;
Name: UI; Description: {#MyAppName} UI; Types: full mini;
Name: Server; Description: {#MyAppName} Server; Types: full mini;
Name: Data; Description: {#MyAppName} Data; Types: full;
;; 安装包引入文件列表
[Files]
; 后端工程+启动器
;Source: "Resources\{#MyAppExeName}.exe"; DestDir: "{app}\{#MyAppExeName}"; Flags: ignoreversion; Components: Starter
;Source: "Resources\{#MyAppExeName}-console.exe"; DestDir: "{app}\{#MyAppExeName}"; Flags: ignoreversion; Components: Starter
;Source: "Resources\{#MyAppExeName}-x64.exe"; DestDir: "{app}\{#MyAppExeName}"; Flags: ignoreversion; Components: Starter
;Source: "Resources\{#MyAppExeName}-x86.exe"; DestDir: "{app}\{#MyAppExeName}"; Flags: ignoreversion; Components: Starter
;Source: "Resources\patch.exe"; DestDir: "{app}\{#MyAppExeName}"; Flags: ignoreversion; Components: Starter
Source: "Resources\{#MyAppExeName}.bat"; DestDir: "{app}\{#MyAppExeName}"; DestName: "{#MyAppExeName}.bat"; Flags: ignoreversion; Components: Starter
Source: "Resources\server\demo-0.0.1.jar"; DestDir: "{app}\{#MyAppExeName}\bin"; Flags: ignoreversion; Components: Server
; 更新数据库脚本
Source: "Resources\script\*"; DestDir: "{app}\{#MyAppExeName}\script"; Flags: ignoreversion recursesubdirs createallsubdirs; Components: Data
; 前端工程 + Nginx
Source: "Resources\web\*"; DestDir: "{app}\{#MyAppExeName}\web"; Flags: ignoreversion recursesubdirs createallsubdirs; Components: Starter;
Source: "Resources\dist\*"; DestDir: "{app}\{#MyAppExeName}\web\dist"; Flags: ignoreversion recursesubdirs createallsubdirs; Components: UI;
;; 安装时注册表与环境变量列表
[Registry]
Root: HKLM; Subkey: "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"; ValueType: string; Flags: uninsdeletevalue; \
ValueName: "SIMULATION_MAIN"; ValueData: "{app}\{#MyAppExeName}";
; 启动jar
Root: HKLM; Subkey: "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"; ValueType: string; Flags: uninsdeletevalue; \
ValueName: "SIMULATION_MANAGE_BIN"; ValueData: "{app}\{#MyAppExeName}\bin\demo-0.0.1.jar";
; 扩展启动vm变量
Root: HKLM; Subkey: "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"; ValueType: string; Flags: uninsdeletevalue; \
ValueName: "SIMULATION_VM_PARAMS"; ValueData: " \
--enable-preview \
-Dserver.port=28280 \
-Djasypt.encryptor.password=jwnwfA1pIoLihBptgbR8S6UEEAfGurjG \
-Dproject.database-ip=127.0.0.1 \
-Dproject.database-port=33306 \
-Dproject.database-name=simulation \
-Dproject.redis-url=127.0.0.1 \
-Dproject.rocketmq-url=127.0.0.1:8081 \
-Dproject.minio-url=http://127.0.0.1:9000 \
-Dproject.eval-service-url=http://127.0.0.1:28480/evaluation/samples/receiveSync \
";
;; 程序 ICO
[Icons]
;Name: "{autoprograms}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}.exe"
;Name: "{autodesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}.exe"; Tasks: desktopicon
Name: "{autodesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}\{#MyAppExeName}.bat"; Tasks: desktopicon
;; 安装完运行的菜单与后续操作
; [Run]
;; 安装完成后运行 startup.exe
; Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: postinstall runascurrentuser waituntilterminated skipifsilent hidewizard;
;; 自定义函数
[Code]
const
WM_SETTINGCHANGE = 26; // 0x001A 的十进制
SMTO_ABORTIFHUNG = 2; // 0x0002 的十进制
// 定义 VC++ 2019 运行时的注册表检查路径
VC2019_REDIST_X64 = '{FF66E9F6-83E7-3A3E-AF14-8DE9A809A6A4}';
VC2019_REDIST_X86 = '{422B21A3-06FA-3F2F-A6C6-21BCC9B8E2F3}';
function SendMessageTimeout(
hWnd: Integer;
Msg: Integer;
wParam: Integer;
lParamStr: String;
fuFlags: Integer;
uTimeout: Integer;
var lpdwResult: Integer
): Integer;
external 'SendMessageTimeoutW@user32.dll stdcall';
// 给 Path 系统环境变量追加环境
function NeedsAddPath(Param: string): boolean;
var
OrigPath: string;
begin
if not RegQueryStringValue(HKEY_LOCAL_MACHINE,
'SYSTEM\CurrentControlSet\Control\Session Manager\Environment',
'Path', OrigPath)
then begin
Result := True;
exit;
end;
// 检查路径是否已存在
Result := Pos(';' + Param + ';', ';' + OrigPath + ';') = 0;
if Result = True then
Result := Pos(';' + Param + '\;', ';' + OrigPath + ';') = 0;
end;
// 刷新系统环境
procedure RefreshEnvironment;
var
Res: Integer;
begin
SendMessageTimeout(
HWND_BROADCAST,
WM_SETTINGCHANGE,
0,
'Environment',
SMTO_ABORTIFHUNG,
5000,
Res
);
end;
// 检查环境变量,路径是否存在空格
function CheckRegistryPath(Path: string): Boolean;
begin
if Pos(' ', Path) > 0 then
begin
SuppressibleMsgBox('安装程序错误: 检测到无效的注册表路径 "' + Path + '"。路径不能包含空格。', mbCriticalError, MB_OK, IDOK);
Abort;
Result := False;
Exit;
end;
Result := True;
end;
// 以 UTF-8 写入文件
function SaveStringToUTF8File(const FileName, Content: String; Append: Boolean): Boolean;
var
UTF8Content: AnsiString;
begin
UTF8Content := UTF8Encode(Content);
Result := SaveStringToFile(FileName, UTF8Content, Append);
end;
// 检查是否已安装 VC++ 2019 运行时
function IsVC2019Installed: Boolean;
var
Version: String;
begin
// 检查64位版本
Result := RegQueryStringValue(
HKLM,
'SOFTWARE\Microsoft\VisualStudio\14.0\VC\Runtimes\x64',
'Version',
Version
) or RegKeyExists(
HKLM,
'SOFTWARE\Classes\Installer\Dependencies\' + VC2019_REDIST_X64
);
// 如果是32位系统或需要检查32位运行时
if not Result and (not IsWin64) then
Result := RegQueryStringValue(
HKLM,
'SOFTWARE\Microsoft\VisualStudio\14.0\VC\Runtimes\x86',
'Version',
Version
) or RegKeyExists(
HKLM,
'SOFTWARE\Classes\Installer\Dependencies\' + VC2019_REDIST_X86
);
end;
// 在安装前检查
function InitializeSetup: Boolean;
begin
// 默认允许安装继续
Result := True;
// 如果 VC++ 2019 未安装
if not IsVC2019Installed then
begin
MsgBox('本程序需要 Microsoft Visual C++ 2019 运行时才能继续1001', mbError, MB_OK)
// 中止安装
Result := False;
end;
end;
[UninstallRun]
Filename: "taskkill"; Parameters: "-f -im simulation-web.exe"; Flags: runascurrentuser runhidden waituntilterminated

View File

@ -0,0 +1,26 @@
@echo off
setlocal enabledelayedexpansion
chcp 65001 >nul
title Initialization
set "BASE_PATH=Resources/"
:: server 启动jar
:: script 或数据库初始化脚本、或数据库补丁脚本
:: web Nginx程序与代理配置
:: dist 服务Web UI
echo [INFO] 正在创建 【实验】 初始化构建安装包目录结构
for %%f in (
"server"
"script/simulation"
"web"
"dist"
) do (
echo [INFO] 创建: %%~f
mkdir "%BASE_PATH%/%%~f"
echo.
)
pause
endlocal