做安装包版本
This commit is contained in:
@@ -0,0 +1,42 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import os
|
||||
import re
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
ROOT = Path(__file__).resolve().parents[1]
|
||||
APP_INFO = ROOT / "app_info.py"
|
||||
ISS_TEMPLATE = ROOT / "installer" / "niumasoftware.iss"
|
||||
ISS_OUT = ROOT / "installer" / "niumasoftware.generated.iss"
|
||||
|
||||
|
||||
def read_version() -> str:
|
||||
text = APP_INFO.read_text(encoding="utf-8")
|
||||
m = re.search(r"""__VERSION__\s*=\s*["']([^"']+)["']""", text)
|
||||
if not m:
|
||||
raise RuntimeError("未在 app_info.py 中找到 __VERSION__")
|
||||
return m.group(1).strip()
|
||||
|
||||
|
||||
def generate_iss(version: str) -> str:
|
||||
tpl = ISS_TEMPLATE.read_text(encoding="utf-8")
|
||||
if "{#AppVersion}" not in tpl:
|
||||
raise RuntimeError("niumasoftware.iss 未包含 {#AppVersion} 占位符")
|
||||
header = f'#define AppVersion "{version}"\n'
|
||||
# 如果模板里已经有 #define,则保留并在最前面插入(避免影响原结构)
|
||||
return header + tpl
|
||||
|
||||
|
||||
def main() -> int:
|
||||
version = read_version()
|
||||
out_text = generate_iss(version)
|
||||
ISS_OUT.write_text(out_text, encoding="utf-8", newline="\n")
|
||||
print(f"generated: {ISS_OUT}")
|
||||
print(f"version: {version}")
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
raise SystemExit(main())
|
||||
|
||||
@@ -0,0 +1,77 @@
|
||||
#define AppVersion "0.0.3"
|
||||
; Inno Setup 安装脚本(全局安装)
|
||||
; 产物约定(统一放在 dist\niumasoftware 下):
|
||||
; - dist\niumasoftware\niumasoftware.exe (主程序,PyInstaller onedir)
|
||||
; - dist\niumasoftware\update_helper.exe (更新助手,PyInstaller onefile)
|
||||
;
|
||||
; 安装时会创建一个“按需运行”的计划任务(最高权限)用于静默覆盖更新:
|
||||
; CleanDesktopOrganizer\Update
|
||||
;
|
||||
; 同时创建 ProgramData 目录并赋予 Users Modify 权限,主程序把下载与请求文件写进去:
|
||||
; {commonappdata}\CleanDesktopOrganizer\
|
||||
|
||||
[Setup]
|
||||
AppName=牛马软件柜
|
||||
; 由 build_installer.py 生成时注入(不要手改)
|
||||
AppVersion={#AppVersion}
|
||||
; 安装包自身图标
|
||||
SetupIconFile=..\logo.ico
|
||||
DefaultDirName={autopf}\牛马软件柜
|
||||
DefaultGroupName=牛马软件柜
|
||||
OutputBaseFilename=牛马软件柜安装包_{#AppVersion}
|
||||
Compression=lzma2
|
||||
SolidCompression=yes
|
||||
PrivilegesRequired=admin
|
||||
ArchitecturesAllowed=x64
|
||||
ArchitecturesInstallIn64BitMode=x64
|
||||
DisableProgramGroupPage=yes
|
||||
UninstallDisplayIcon={app}\niumasoftware.exe
|
||||
|
||||
[Tasks]
|
||||
Name: desktopicon; Description: "创建桌面快捷方式"; GroupDescription: "附加图标:"; Flags: unchecked
|
||||
|
||||
[Dirs]
|
||||
; ProgramData:给普通用户写入下载包与请求文件(更新计划任务读取)
|
||||
Name: "{commonappdata}\CleanDesktopOrganizer"; Permissions: users-modify
|
||||
Name: "{commonappdata}\CleanDesktopOrganizer\updates"; Permissions: users-modify
|
||||
|
||||
[Files]
|
||||
; PyInstaller onedir:直接复制整个目录(包含 _internal、dll、资源等)
|
||||
Source: "..\dist\niumasoftware\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
|
||||
; 更新助手:PyInstaller onefile 也输出到 dist\niumasoftware 目录
|
||||
Source: "..\dist\niumasoftware\update_helper.exe"; DestDir: "{app}"; Flags: ignoreversion
|
||||
|
||||
[Icons]
|
||||
Name: "{group}\牛马软件柜"; Filename: "{app}\niumasoftware.exe"; IconFilename: "{app}\niumasoftware.exe"
|
||||
Name: "{autodesktop}\牛马软件柜"; Filename: "{app}\niumasoftware.exe"; Tasks: desktopicon; IconFilename: "{app}\niumasoftware.exe"
|
||||
|
||||
[Run]
|
||||
Filename: "{app}\niumasoftware.exe"; Description: "运行 牛马软件柜"; Flags: nowait postinstall skipifsilent
|
||||
|
||||
[UninstallRun]
|
||||
Filename: "{sys}\schtasks.exe"; Parameters: "/Delete /TN ""CleanDesktopOrganizer\Update"" /F"; Flags: runhidden
|
||||
|
||||
[Code]
|
||||
procedure CreateUpdateTask();
|
||||
var
|
||||
ResultCode: Integer;
|
||||
Cmd: string;
|
||||
begin
|
||||
// 计划任务:以 SYSTEM 运行,按需触发(/SC ONDEMAND)
|
||||
// 注意:TR 不带参数,update_helper.exe 会读取 ProgramData 请求文件
|
||||
Cmd :=
|
||||
'/Create /F /TN "CleanDesktopOrganizer\Update" ' +
|
||||
'/RU "SYSTEM" /RL HIGHEST /SC ONDEMAND ' +
|
||||
'/TR "' + ExpandConstant('{app}\update_helper.exe') + '"';
|
||||
|
||||
Exec(ExpandConstant('{sys}\schtasks.exe'), Cmd, '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
|
||||
end;
|
||||
|
||||
procedure CurStepChanged(CurStep: TSetupStep);
|
||||
begin
|
||||
if CurStep = ssPostInstall then
|
||||
begin
|
||||
CreateUpdateTask();
|
||||
end;
|
||||
end;
|
||||
|
||||
@@ -0,0 +1,76 @@
|
||||
; Inno Setup 安装脚本(全局安装)
|
||||
; 产物约定(统一放在 dist\niumasoftware 下):
|
||||
; - dist\niumasoftware\niumasoftware.exe (主程序,PyInstaller onedir)
|
||||
; - dist\niumasoftware\update_helper.exe (更新助手,PyInstaller onefile)
|
||||
;
|
||||
; 安装时会创建一个“按需运行”的计划任务(最高权限)用于静默覆盖更新:
|
||||
; CleanDesktopOrganizer\Update
|
||||
;
|
||||
; 同时创建 ProgramData 目录并赋予 Users Modify 权限,主程序把下载与请求文件写进去:
|
||||
; {commonappdata}\CleanDesktopOrganizer\
|
||||
|
||||
[Setup]
|
||||
AppName=牛马软件柜
|
||||
; 由 build_installer.py 生成时注入(不要手改)
|
||||
AppVersion={#AppVersion}
|
||||
; 安装包自身图标
|
||||
SetupIconFile=..\logo.ico
|
||||
DefaultDirName={autopf}\牛马软件柜
|
||||
DefaultGroupName=牛马软件柜
|
||||
OutputBaseFilename=牛马软件柜安装包_{#AppVersion}
|
||||
Compression=lzma2
|
||||
SolidCompression=yes
|
||||
PrivilegesRequired=admin
|
||||
ArchitecturesAllowed=x64
|
||||
ArchitecturesInstallIn64BitMode=x64
|
||||
DisableProgramGroupPage=yes
|
||||
UninstallDisplayIcon={app}\niumasoftware.exe
|
||||
|
||||
[Tasks]
|
||||
Name: desktopicon; Description: "创建桌面快捷方式"; GroupDescription: "附加图标:"; Flags: unchecked
|
||||
|
||||
[Dirs]
|
||||
; ProgramData:给普通用户写入下载包与请求文件(更新计划任务读取)
|
||||
Name: "{commonappdata}\CleanDesktopOrganizer"; Permissions: users-modify
|
||||
Name: "{commonappdata}\CleanDesktopOrganizer\updates"; Permissions: users-modify
|
||||
|
||||
[Files]
|
||||
; PyInstaller onedir:直接复制整个目录(包含 _internal、dll、资源等)
|
||||
Source: "..\dist\niumasoftware\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
|
||||
; 更新助手:PyInstaller onefile 也输出到 dist\niumasoftware 目录
|
||||
Source: "..\dist\niumasoftware\update_helper.exe"; DestDir: "{app}"; Flags: ignoreversion
|
||||
|
||||
[Icons]
|
||||
Name: "{group}\牛马软件柜"; Filename: "{app}\niumasoftware.exe"; IconFilename: "{app}\niumasoftware.exe"
|
||||
Name: "{autodesktop}\牛马软件柜"; Filename: "{app}\niumasoftware.exe"; Tasks: desktopicon; IconFilename: "{app}\niumasoftware.exe"
|
||||
|
||||
[Run]
|
||||
Filename: "{app}\niumasoftware.exe"; Description: "运行 牛马软件柜"; Flags: nowait postinstall skipifsilent
|
||||
|
||||
[UninstallRun]
|
||||
Filename: "{sys}\schtasks.exe"; Parameters: "/Delete /TN ""CleanDesktopOrganizer\Update"" /F"; Flags: runhidden
|
||||
|
||||
[Code]
|
||||
procedure CreateUpdateTask();
|
||||
var
|
||||
ResultCode: Integer;
|
||||
Cmd: string;
|
||||
begin
|
||||
// 计划任务:以 SYSTEM 运行,按需触发(/SC ONDEMAND)
|
||||
// 注意:TR 不带参数,update_helper.exe 会读取 ProgramData 请求文件
|
||||
Cmd :=
|
||||
'/Create /F /TN "CleanDesktopOrganizer\Update" ' +
|
||||
'/RU "SYSTEM" /RL HIGHEST /SC ONDEMAND ' +
|
||||
'/TR "' + ExpandConstant('{app}\update_helper.exe') + '"';
|
||||
|
||||
Exec(ExpandConstant('{sys}\schtasks.exe'), Cmd, '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
|
||||
end;
|
||||
|
||||
procedure CurStepChanged(CurStep: TSetupStep);
|
||||
begin
|
||||
if CurStep = ssPostInstall then
|
||||
begin
|
||||
CreateUpdateTask();
|
||||
end;
|
||||
end;
|
||||
|
||||
Reference in New Issue
Block a user