#ifdef X ; 如果同时定义了 ACAD 和 ZWCAD 整合打包 #ifdef ZWCAD #ifdef ACAD #define MERGER_CAD #endif #endif #ifdef MERGER_CAD #ifdef TRIAL_YEAR #define MyAppName "Envi3D Design System TRIAL VERSION" #else #define MyAppName "Envi3D Design System" #endif #else #ifdef ZWCAD #ifdef TRIAL_YEAR #define MyAppName "Envi3D Design System for ZWCAD TRIAL VERSION" #else #define MyAppName "Envi3D Design System for ZWCAD" #endif #endif #ifdef ACAD #ifdef TRIAL_YEAR #define MyAppName "Envi3D Design System for AutoCAD TRIAL VERSION" #else #define MyAppName "Envi3D Design System for AutoCAD" #endif #endif #endif #ifdef MERGER_CAD #define APPDATA "\ShangHuaSoft\Envi3D-2026-M" #else #ifdef ZWCAD #define APPDATA "\ShangHuaSoft\Envi3D-2026-Z" #endif #ifdef ACAD #define APPDATA "\ShangHuaSoft\Envi3D-2026-A" #endif #endif #endif #define MyAppPublisher "ShangHuaSoft, Inc." #define MyAppURL "http://www.shanghuasoft.com/" #define DateTime GetDateTimeString('(yyyy.mm.dd-hh.nn)', '-', ':') #define INIDateTime GetDateTimeString('yyyymmddhhnn', '', '') #define PROFILES "SHS-ENVI" #define VERSION "2026" #define APPVER "V6.0" #define PACKAGE_PATH "..\Original-File\cmake_environment" #define REG_KEY_ACAD "Software\Autodesk\AutoCAD\R" #define REG_KEY_ZWCAD "Software\ZWSOFT\ZWCAD\" #define ENAME "Envi3D" #define MyAppExeName "Envi3D.exe" [Setup] AppId={#guid} #ifdef X #ifdef MERGER_CAD AppId={{B6B260A5-F162-4B7C-A6E6-FDA33D152FDC} #else #ifdef ZWCAD AppId={{B6B260A5-F162-4B7C-A6E6-FDA33D152FDA} #endif #ifdef ACAD AppId={{B6B260A5-F162-4B7C-A6E6-FDA33D152026} #endif #endif #ifdef MERGER_CAD #ifdef TRIAL_YEAR OutputBaseFilename=Envi3D{#VERSION}_M_T{#DateTime} #else OutputBaseFilename=Envi3D{#VERSION}_M{#DateTime} #endif #else #ifdef ZWCAD #ifdef TRIAL_YEAR OutputBaseFilename=Envi3D{#VERSION}_Z_T{#DateTime} #else OutputBaseFilename=Envi3D{#VERSION}_Z{#DateTime} #endif #endif #ifdef ACAD #ifdef TRIAL_YEAR OutputBaseFilename=Envi3D{#VERSION}_A_T{#DateTime} #else OutputBaseFilename=Envi3D{#VERSION}_A{#DateTime} #endif #endif #endif #endif AppName={#MyAppName} AppVersion={#APPVER} AppPublisher={#MyAppPublisher} AppPublisherURL={#MyAppURL} AppSupportURL={#MyAppURL} AppUpdatesURL={#MyAppURL} DefaultDirName={sd}{#APPDATA} DisableProgramGroupPage=yes OutputDir=..\Output-File SetupIconFile={#PACKAGE_PATH}\sys\poolplant.ico OutputBaseFilename={#OutputBaseFilename}{#VERSION}{#DateTime} Compression=lzma SolidCompression=yes DisableDirPage=no ;Uninstallable=no PrivilegesRequired=admin ArchitecturesInstallIn64BitMode=x64 ;修改左侧图片(大) ;WizardImageFile=dh.bmp ;修改右上角图片(小) ;WizardSmallImageFile=xx.bmp UsePreviousTasks=no [Languages] ;Name: "Chinese"; MessagesFile: "compiler:Languages\ChineseSimplified.isl" [Tasks] Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: checkablealone Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked; OnlyBelowVersion: 0,6.1 #ifndef TRIAL_YEAR Name: "remote" ; Description:"集团授权";GroupDescription: "选择授权"; Flags: exclusive; Name: "local" ; Description:"单机授权";GroupDescription: "选择授权"; Flags: exclusive #endif Name: "overwriteDB" ; Description:"覆盖当前用户数据";GroupDescription: "安装选项"; Flags: unchecked ; 开放路径权限 [Dirs] Name: "{app}"; Permissions: everyone-modify [Files] ;把7za.exe文件打包进来, 安装完成后,使用它来解压大文件 Source: "..\7za.exe"; DestDir: "{tmp}"; Flags: deleteafterinstall Source: "{#PACKAGE_PATH}\StartApp.exe"; DestDir: "{app}\"; DestName: "{#MyAppExeName}"; Flags: ignoreversion Source: "{#PACKAGE_PATH}\INIFileParser.dll"; DestDir: "{app}\"; Flags: ignoreversion #ifndef TRIAL_YEAR Source: "{#PACKAGE_PATH}\上华软件-集团服务器设置工具.exe"; DestDir: "{app}\"; Flags: ignoreversion;Tasks: remote Source: "{#PACKAGE_PATH}\上华软件-授权管理工具.exe"; DestDir: "{app}\"; Flags: ignoreversion;Tasks: local #endif Source: "{#PACKAGE_PATH}\demo\*"; DestDir: "{app}\demo\"; Flags: ignoreversion recursesubdirs createallsubdirs onlyifdoesntexist // 整合版本,AutoCAD平台需要 AsdkHlrDbx #ifdef ACAD Source: "{#PACKAGE_PATH}\AsdkHlrDbx\*"; DestDir: "{app}\AsdkHlrDbx\"; Flags: ignoreversion recursesubdirs createallsubdirs onlyifdoesntexist #endif Source: "{#PACKAGE_PATH}\drawframe\*"; DestDir: "{app}\drawframe\"; Flags: ignoreversion recursesubdirs createallsubdirs onlyifdoesntexist Source: "{#PACKAGE_PATH}\temp\*"; DestDir: "{app}\temp\"; Flags: ignoreversion recursesubdirs createallsubdirs onlyifdoesntexist Source: "{#PACKAGE_PATH}\mdlapps\*"; DestDir: "{app}\mdlapps\"; Flags: ignoreversion recursesubdirs createallsubdirs onlyifdoesntexist Source: "{#PACKAGE_PATH}\Equipment2D\*"; DestDir: "{app}\Equipment2D\"; Flags: ignoreversion recursesubdirs createallsubdirs onlyifdoesntexist Source: "{#PACKAGE_PATH}\Support\*"; DestDir: "{app}\Support\"; Flags: ignoreversion recursesubdirs createallsubdirs uninsneveruninstall; Tasks: overwriteDB Source: "{#PACKAGE_PATH}\dwb\*"; DestDir: "{app}\dwb\"; Flags: ignoreversion recursesubdirs createallsubdirs uninsneveruninstall; Tasks: overwriteDB Source: "{#PACKAGE_PATH}\tk\*"; DestDir: "{app}\tk\"; Flags: ignoreversion recursesubdirs createallsubdirs uninsneveruninstall; Tasks: overwriteDB Source: "{#PACKAGE_PATH}\Support\*"; DestDir: "{app}\Support\"; Flags: ignoreversion recursesubdirs createallsubdirs onlyifdoesntexist uninsneveruninstall; Tasks: not overwriteDB Source: "{#PACKAGE_PATH}\dwb\*"; DestDir: "{app}\dwb\"; Flags: ignoreversion recursesubdirs createallsubdirs onlyifdoesntexist uninsneveruninstall; Tasks: not overwriteDB Source: "{#PACKAGE_PATH}\tk\*"; DestDir: "{app}\tk\"; Flags: ignoreversion recursesubdirs createallsubdirs onlyifdoesntexist uninsneveruninstall; Tasks: not overwriteDB ;sys目录下文件比较复杂,在此一一说明 ;*.db文件为用户数据文件,不要求覆盖 ;dict.xml文件专版用户需要使用,不要求覆盖 ;拷贝所有sys内的文件,覆盖 ;过滤掉 hugeDb.7z 文件,在下面单独复制它,这样,如果它不存在话h,iss会报错. Source: "{#PACKAGE_PATH}\sys\*"; DestDir: "{app}\sys\";Flags: ignoreversion recursesubdirs createallsubdirs;Excludes: "pp3d-*.mnu,pp3d-*.dll,*.db,hugeDb.7z" ;单独复制hugeDb.7z,防止丢失 Source: "{#PACKAGE_PATH}\sys\hugeDb.7z"; DestDir: "{app}\sys\";Flags: nocompression ignoreversion ; ;单独复制hugeHelp.7z,防止丢失 Source: "{#PACKAGE_PATH}\help\hugeHelp.7z"; DestDir: "{app}\help\";Flags: nocompression ignoreversion ; ;单独处里以下类型文件,不覆盖原有文件 Source: "{#PACKAGE_PATH}\sys\*.db"; DestDir: "{app}\sys\"; Flags: ignoreversion uninsneveruninstall; Tasks: overwriteDB Source: "{#PACKAGE_PATH}\sys\*.db"; DestDir: "{app}\sys\"; Flags: ignoreversion uninsneveruninstall onlyifdoesntexist; Tasks: not overwriteDB ;拷贝 programData内的数据到{commonappdata}内,只有不存在时,并且不卸载 Source: "{#PACKAGE_PATH}\programdata\*"; DestDir: "{app}\sys\";Flags: ignoreversion recursesubdirs createallsubdirs uninsneveruninstall ;arx文件,不会拷贝目录里的子目录 #ifdef ZWCAD #ifdef Z2023 Source: "{#PACKAGE_PATH}\Z2023\*"; DestDir: "{app}\Z2023\"; Flags: ignoreversion; Check: IsWin64 #ifdef TRIAL_YEAR Source: "{#PACKAGE_PATH}\Z2023\{#PRODUCT}-TRIAL_YEAR\*"; DestDir: "{app}\Z2023\"; Flags: ignoreversion; Check: IsWin64 #else ;Source: "{#PACKAGE_PATH}\Z2023\{#PRODUCT}-BAL_LOCAL\*"; DestDir: "{app}\Z2023\"; Flags: ignoreversion; Check: IsWin64 ;Tasks: local Source: "{#PACKAGE_PATH}\Z2023\{#PRODUCT}-BAL_REMOTE\*"; DestDir: "{app}\Z2023\"; Flags: ignoreversion; Check: IsWin64 ; #endif #endif #ifdef Z2024 Source: "{#PACKAGE_PATH}\Z2024\*"; DestDir: "{app}\Z2024\"; Flags: ignoreversion ; Check: IsWin64 #ifdef TRIAL_YEAR Source: "{#PACKAGE_PATH}\Z2024\{#PRODUCT}-TRIAL_YEAR\*"; DestDir: "{app}\Z2024\"; Flags: ignoreversion ; Check: IsWin64 #else ;Source: "{#PACKAGE_PATH}\Z2024\{#PRODUCT}-BAL_LOCAL\*"; DestDir: "{app}\Z2024\"; Flags: ignoreversion ; Check: IsWin64 ;Tasks: local Source: "{#PACKAGE_PATH}\Z2024\{#PRODUCT}-BAL_REMOTE\*"; DestDir: "{app}\Z2024\"; Flags: ignoreversion ; Check: IsWin64 ; #endif #endif #ifdef Z2025 Source: "{#PACKAGE_PATH}\Z2025\*"; DestDir: "{app}\Z2025\"; Flags: ignoreversion ; Check: IsWin64 #ifdef TRIAL_YEAR Source: "{#PACKAGE_PATH}\Z2025\{#PRODUCT}-TRIAL_YEAR\*"; DestDir: "{app}\Z2025\"; Flags: ignoreversion ; Check: IsWin64 #else ;Source: "{#PACKAGE_PATH}\Z2025\{#PRODUCT}-BAL_LOCAL\*"; DestDir: "{app}\Z2025\"; Flags: ignoreversion ; Check: IsWin64 ;Tasks: local Source: "{#PACKAGE_PATH}\Z2025\{#PRODUCT}-BAL_REMOTE\*"; DestDir: "{app}\Z2025\"; Flags: ignoreversion ; Check: IsWin64 ; #endif #endif #ifdef Z2026 Source: "{#PACKAGE_PATH}\Z2026\*"; DestDir: "{app}\Z2026\"; Flags: ignoreversion ; Check: IsWin64 #ifdef TRIAL_YEAR Source: "{#PACKAGE_PATH}\Z2026\{#PRODUCT}-TRIAL_YEAR\*"; DestDir: "{app}\Z2026\"; Flags: ignoreversion ; Check: IsWin64 #else ;Source: "{#PACKAGE_PATH}\Z2026\{#PRODUCT}-BAL_LOCAL\*"; DestDir: "{app}\Z2026\"; Flags: ignoreversion ; Check: IsWin64 ;Tasks: local Source: "{#PACKAGE_PATH}\Z2026\{#PRODUCT}-BAL_REMOTE\*"; DestDir: "{app}\Z2026\"; Flags: ignoreversion ; Check: IsWin64 ; #endif #endif #endif #ifdef ACAD #ifdef R180 Source: "{#PACKAGE_PATH}\R180\*"; DestDir: "{app}\R180\"; Flags: ignoreversion ; Check: IsWin64 #ifdef TRIAL_YEAR Source: "{#PACKAGE_PATH}\R180\{#PRODUCT}-TRIAL_YEAR\*"; DestDir: "{app}\R180\"; Flags: ignoreversion ; Check: IsWin64 #else ;Source: "{#PACKAGE_PATH}\R180\{#PRODUCT}-BAL_LOCAL\*"; DestDir: "{app}\R180\"; Flags: ignoreversion ; Check: IsWin64 ;Tasks: local Source: "{#PACKAGE_PATH}\R180\{#PRODUCT}-BAL_REMOTE\*"; DestDir: "{app}\R180\"; Flags: ignoreversion ; Check: IsWin64 ; #endif #endif #ifdef R190 Source: "{#PACKAGE_PATH}\R190\*"; DestDir: "{app}\R190\"; Flags: ignoreversion ; Check: IsWin64 #ifdef TRIAL_YEAR Source: "{#PACKAGE_PATH}\R190\{#PRODUCT}-TRIAL_YEAR\*"; DestDir: "{app}\R190\"; Flags: ignoreversion ; Check: IsWin64 #else ;Source: "{#PACKAGE_PATH}\R190\{#PRODUCT}-BAL_LOCAL\*"; DestDir: "{app}\R190\"; Flags: ignoreversion ; Check: IsWin64 ;Tasks: local Source: "{#PACKAGE_PATH}\R190\{#PRODUCT}-BAL_REMOTE\*"; DestDir: "{app}\R190\"; Flags: ignoreversion ; Check: IsWin64 ; #endif #endif #ifdef R200 Source: "{#PACKAGE_PATH}\R200\*"; DestDir: "{app}\R200\"; Flags: ignoreversion ; Check: IsWin64 #ifdef TRIAL_YEAR Source: "{#PACKAGE_PATH}\R200\{#PRODUCT}-TRIAL_YEAR\*"; DestDir: "{app}\R200\"; Flags: ignoreversion ; Check: IsWin64 #else ;Source: "{#PACKAGE_PATH}\R200\{#PRODUCT}-BAL_LOCAL\*"; DestDir: "{app}\R200\"; Flags: ignoreversion ; Check: IsWin64 ;Tasks: local Source: "{#PACKAGE_PATH}\R200\{#PRODUCT}-BAL_REMOTE\*"; DestDir: "{app}\R200\"; Flags: ignoreversion ; Check: IsWin64 ; #endif #endif #ifdef R210 Source: "{#PACKAGE_PATH}\R210\*"; DestDir: "{app}\R210\"; Flags: ignoreversion ; Check: IsWin64 #ifdef TRIAL_YEAR Source: "{#PACKAGE_PATH}\R210\{#PRODUCT}-TRIAL_YEAR\*"; DestDir: "{app}\R210\"; Flags: ignoreversion ; Check: IsWin64 #else ;Source: "{#PACKAGE_PATH}\R210\{#PRODUCT}-BAL_LOCAL\*"; DestDir: "{app}\R210\"; Flags: ignoreversion ; Check: IsWin64 ;Tasks: local Source: "{#PACKAGE_PATH}\R210\{#PRODUCT}-BAL_REMOTE\*"; DestDir: "{app}\R210\"; Flags: ignoreversion ; Check: IsWin64 ; #endif #endif #ifdef R220 Source: "{#PACKAGE_PATH}\R220\*"; DestDir: "{app}\R220\"; Flags: ignoreversion ; Check: IsWin64 #ifdef TRIAL_YEAR Source: "{#PACKAGE_PATH}\R220\{#PRODUCT}-TRIAL_YEAR\*"; DestDir: "{app}\R220\"; Flags: ignoreversion ; Check: IsWin64 #else ;Source: "{#PACKAGE_PATH}\R220\{#PRODUCT}-BAL_LOCAL\*"; DestDir: "{app}\R220\"; Flags: ignoreversion ; Check: IsWin64 ;Tasks: local Source: "{#PACKAGE_PATH}\R220\{#PRODUCT}-BAL_REMOTE\*"; DestDir: "{app}\R220\"; Flags: ignoreversion ; Check: IsWin64 ; #endif #endif #ifdef R230 Source: "{#PACKAGE_PATH}\R230\*"; DestDir: "{app}\R230\"; Flags: ignoreversion ; Check: IsWin64 #ifdef TRIAL_YEAR Source: "{#PACKAGE_PATH}\R230\{#PRODUCT}-TRIAL_YEAR\*"; DestDir: "{app}\R230\"; Flags: ignoreversion ; Check: IsWin64 #else ;Source: "{#PACKAGE_PATH}\R230\{#PRODUCT}-BAL_LOCAL\*"; DestDir: "{app}\R230\"; Flags: ignoreversion ; Check: IsWin64 ;Tasks: local Source: "{#PACKAGE_PATH}\R230\{#PRODUCT}-BAL_REMOTE\*"; DestDir: "{app}\R230\"; Flags: ignoreversion ; Check: IsWin64 ; #endif #endif #ifdef R240 Source: "{#PACKAGE_PATH}\R240\*"; DestDir: "{app}\R240\"; Flags: ignoreversion ; Check: IsWin64 #ifdef TRIAL_YEAR Source: "{#PACKAGE_PATH}\R240\{#PRODUCT}-TRIAL_YEAR\*"; DestDir: "{app}\R240\"; Flags: ignoreversion ; Check: IsWin64 #else ;Source: "{#PACKAGE_PATH}\R240\{#PRODUCT}-BAL_LOCAL\*"; DestDir: "{app}\R240\"; Flags: ignoreversion ; Check: IsWin64 ;Tasks: local Source: "{#PACKAGE_PATH}\R240\{#PRODUCT}-BAL_REMOTE\*"; DestDir: "{app}\R240\"; Flags: ignoreversion ; Check: IsWin64 ; #endif #endif #ifdef R243 Source: "{#PACKAGE_PATH}\R243\*"; DestDir: "{app}\R243\"; Flags: ignoreversion ; Check: IsWin64 #ifdef TRIAL_YEAR Source: "{#PACKAGE_PATH}\R243\{#PRODUCT}-TRIAL_YEAR\*"; DestDir: "{app}\R243\"; Flags: ignoreversion ; Check: IsWin64 #else ;Source: "{#PACKAGE_PATH}\R243\{#PRODUCT}-BAL_LOCAL\*"; DestDir: "{app}\R243\"; Flags: ignoreversion ; Check: IsWin64 ;Tasks: local Source: "{#PACKAGE_PATH}\R243\{#PRODUCT}-BAL_REMOTE\*"; DestDir: "{app}\R243\"; Flags: ignoreversion ; Check: IsWin64 ; #endif #endif #ifdef R250 Source: "{#PACKAGE_PATH}\R250\*"; DestDir: "{app}\R250\"; Flags: ignoreversion ; Check: IsWin64 #ifdef TRIAL_YEAR Source: "{#PACKAGE_PATH}\R250\{#PRODUCT}-TRIAL_YEAR\*"; DestDir: "{app}\R250\"; Flags: ignoreversion ; Check: IsWin64 #else ;Source: "{#PACKAGE_PATH}\R250\{#PRODUCT}-BAL_LOCAL\*"; DestDir: "{app}\R250\"; Flags: ignoreversion ; Check: IsWin64 ;Tasks: local Source: "{#PACKAGE_PATH}\R250\{#PRODUCT}-BAL_REMOTE\*"; DestDir: "{app}\R250\"; Flags: ignoreversion ; Check: IsWin64 ; #endif #endif #ifdef R260 Source: "{#PACKAGE_PATH}\R260\*"; DestDir: "{app}\R260\"; Flags: ignoreversion ; Check: IsWin64 #ifdef TRIAL_YEAR Source: "{#PACKAGE_PATH}\R260\{#PRODUCT}-TRIAL_YEAR\*"; DestDir: "{app}\R260\"; Flags: ignoreversion ; Check: IsWin64 #else ;Source: "{#PACKAGE_PATH}\R260\{#PRODUCT}-BAL_LOCAL\*"; DestDir: "{app}\R260\"; Flags: ignoreversion ; Check: IsWin64 ;Tasks: local Source: "{#PACKAGE_PATH}\R260\{#PRODUCT}-BAL_REMOTE\*"; DestDir: "{app}\R260\"; Flags: ignoreversion ; Check: IsWin64 ; #endif #endif #endif [Registry] Root: HKLM; Subkey: "Software\ShangHuaSoft\Environment"; ValueType: string; ValueName: "InstallPath"; ValueData: "{app}"; Flags: uninsdeletekey [Icons] Name: "{commonprograms}\{#ENAME} {#Shortcut} {#APPVER}"; Filename: "{app}\{#MyAppExeName}" Name: "{commondesktop}\{#ENAME} {#Shortcut} {#APPVER}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon #ifdef X #ifdef MERGER_CAD Name: "{commonprograms}\{#ENAME} {#APPVER}"; Filename: "{app}\{#MyAppExeName}" Name: "{commondesktop}\{#ENAME} {#APPVER}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon #else #ifdef ZWCAD Name: "{commonprograms}\{#ENAME} ZWCAD {#APPVER}"; Filename: "{app}\{#MyAppExeName}" Name: "{commondesktop}\{#ENAME} ZWCAD {#APPVER}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon #endif #ifdef ACAD Name: "{commonprograms}\{#ENAME} ACAD {#APPVER}"; Filename: "{app}\{#MyAppExeName}" Name: "{commondesktop}\{#ENAME} ACAD {#APPVER}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon #endif #endif #endif [Run] Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent [LangOptions] LanguageID=$0804 [INI] #ifdef TRIAL_YEAR Filename: "{app}\sys\product.ini"; Section: "Product"; Key: "CName"; String: {#ENAME} TRIAL VERSION Filename: "{app}\sys\product.ini"; Section: "Product"; Key: "EName"; String: {#ENAME} TRIAL VERSION #else Filename: "{app}\sys\product.ini"; Section: "Product"; Key: "CName"; String: {#ENAME} Filename: "{app}\sys\product.ini"; Section: "Product"; Key: "EName"; String: {#ENAME} #endif Filename: "{app}\sys\product.ini"; Section: "Product"; Key: "ProfilesName"; String: {#PROFILES}; Filename: "{app}\sys\product.ini"; Section: "Product"; Key: "Version"; String: {#VERSION}; Filename: "{app}\sys\product.ini"; Section: "Product"; Key: "APPVer"; String: {#APPVER}; Filename: "{app}\sys\product.ini"; Section: "Product"; Key: "SubVer"; String: Build{#INIDateTime}; Filename: "{app}\sys\product.ini"; Section: "MENUS"; Key: "env-pid"; String: "工艺流程"; Filename: "{app}\sys\product.ini"; Section: "MENUS"; Key: "env-plot-plan"; String: "总图设计"; Filename: "{app}\sys\product.ini"; Section: "MENUS"; Key: "env-arch"; String: "土建设计"; Filename: "{app}\sys\product.ini"; Section: "MENUS"; Key: "env-pipe"; String: "工艺管道"; Filename: "{app}\sys\product.ini"; Section: "MENUS"; Key: "env-hvac-elec"; String: "暖通电气"; Filename: "{app}\sys\product.ini"; Section: "MENUS"; Key: "env-statistic-plot"; String: "统计出图"; Filename: "{app}\sys\product.ini"; Section: "MENUS"; Key: "env-digital-collaboration"; String: "数字协同"; Filename: "{app}\sys\product.ini"; Section: "STARTAPP"; Key: "CADVer"; String: "{code:getCADVersionList}"; Filename: "{app}\sys\product.ini"; Section: "Product"; Key: "IconFile"; String: "poolplant.ico"; ; 根据用户选择,把加密方式写到ini #ifndef TRIAL_YEAR Filename: "{app}\sys\product.ini"; Section: "STARTAPP"; Key: "bal"; String: "local"; Tasks:local; Filename: "{app}\sys\product.ini"; Section: "STARTAPP"; Key: "bal"; String: "remote"; Tasks:remote; #endif [Messages] ButtonFinish=完成(&F) [InstallDelete] ;确保efeTemplete.dt ewnode2d.db 两个文件不在 水处理 安装目录下 Type: files; Name: "{app}\sys\efeTemplete.db" Type: files; Name: "{app}\sys\ewnode2d.db" [UninstallDelete] ; 在卸载的时候,删除解压出来的文件,db不需要删除,目前只需要删除help目录 Type: filesandordirs; Name:"{app}\help" [code] function getCADVersionList(vv: string):string; var s:string; begin s := ''; #ifdef R180 s :=s+ 'R180:R181:R182:'; // autoCAD 2010,2011,2012 #endif #ifdef R190 s :=s+ 'R190:R191:'; // autoCAD 2013,2014 #endif #ifdef R200 s :=s+ 'R200:R201:'; // autoCAD 2015,2016 #endif #ifdef R210 s :=s+ 'R210:'; // autoCAD 2017 #endif #ifdef R220 s :=s+ 'R220:'; // autoCAD 2018 #endif #ifdef R230 s :=s+ 'R230:R231:'; // autoCAD 2019,2020 #endif #ifdef R240 s :=s+ 'R240:R241:R242:'; // autoCAD 2021,2022,2023 #endif #ifdef R243 s :=s+ 'R243:'; // autoCAD 2024 #endif #ifdef R250 s :=s+ 'R250:R251:'; // autoCAD 2025,2026 #endif #ifdef R260 s :=s+ 'R260:'; // autoCAD 2027 #endif #ifdef Z2023 s :=s+ 'Z2023:'; // zwcad 2023 #endif #ifdef Z2024 s :=s+ 'Z2024:'; // zwcad 2024 #endif #ifdef Z2025 s :=s+ 'Z2025:'; // zwcad 2025 #endif #ifdef Z2026 s :=s+ 'Z2026:'; // zwcad 2026 #endif Result := s; end; function hasCADVersion(ver:string;regkey:string):boolean; var s:string; begin s := regkey + ver + '\'; Log(s); if RegKeyExists(HKCU, s) then begin Result := true; Log('exists'); end else begin Result := false; Log('no exists'); end; end; function getRoamableRootFolder(ver:string; name:string; regkey:string):string; var key:string; value:string; begin key := regkey + ver + '\' + name + '\'; Log(key); if RegKeyExists(HKCU, key) then begin if RegValueExists(HKCU, key, 'RoamableRootFolder') then begin RegQueryStringValue(HKCU, key, 'RoamableRootFolder', value); Result := value; end; end; end; function getDefaultACADContent_ACAD(ver:string; name:string):string; var key:string; acad:string; insDir:string; RoamableRoot:string; begin RoamableRoot := getRoamableRootFolder(ver,name,'{#REG_KEY_ACAD}'); Log(RoamableRoot); key := '{#REG_KEY_ACAD}' + ver + '\' + name + '\'; Log(key); if RegKeyExists(HKLM, key) then begin if RegValueExists(HKLM, key, 'AcadLocation') then begin RegQueryStringValue(HKLM, key, 'AcadLocation', insDir); acad := insDir + '\SUPPORT;'; acad := acad + insDir + '\FONTS;'; acad := acad + insDir + '\HELP;'; acad := acad + insDir + '\SUPPORT\zh-cn;'; acad := acad + RoamableRoot + 'SUPPORT;'; Log(acad); Result := acad; end; end; end; function getDefaultACADContent_ZWCAD(ver:string; name:string):string; var key:string; acad:string; insDir:string; RoamableRoot:string; begin RoamableRoot := getRoamableRootFolder(ver,name,'{#REG_KEY_ZWCAD}'); Log(RoamableRoot); key := '{#REG_KEY_ZWCAD}' + ver + '\' + name + '\'; Log(key); if RegKeyExists(HKLM, key) then begin if RegValueExists(HKLM, key, 'Location') then begin RegQueryStringValue(HKLM, key, 'Location', insDir); acad := insDir + 'Support;'; acad := acad + insDir + 'Support\' + name + ';'; acad := acad + insDir + 'fonts;'; acad := acad + insDir + name + '\help;'; acad := acad + insDir + 'Express;'; acad := acad + insDir + 'Support\color;'; acad := acad + insDir + 'Render;'; acad := acad + insDir + 'Render\appl\comm\DCL;'; acad := acad + insDir + 'Render\RPS Material Libraries\Generic;'; acad := acad + RoamableRoot + 'SUPPORT;'; Log(acad); Result := acad; end; end; end; procedure setCADProfilesKey_ACAD(verM:string; verS:string); var key:string; subkey:string; Names: TArrayOfString; I: Integer; S: String; pfsKey: String; ver:String; sApp:String; str1:String; str2:String; intM:Integer; begin ver := verM+'.'+verS; sApp := ExpandConstant('{app}'); intM := StrToInt(verM); if (hasCADVersion(ver, '{#REG_KEY_ACAD}')) then begin key := '{#REG_KEY_ACAD}' + ver + '\'; Log(key); if RegGetSubkeyNames(HKCU, key, Names) then begin S := ''; for I := 0 to GetArrayLength(Names)-1 do begin subkey := key + Names[I] + '\Profiles\'; Log(subkey); if RegKeyExists(HKEY_CURRENT_USER, subkey) then begin pfsKey := subkey + '{#PROFILES}{#VERSION}' + '\Drawing Window'; RegWriteDWordValue(HKCU, pfsKey, 'Parallel background', $00e1e1e1); RegWriteDWordValue(HKCU, pfsKey, 'Parallel grid minor lines color', $00d2d2d2); RegWriteDWordValue(HKCU, pfsKey, 'Background', $00000000); RegWriteDWordValue(HKCU, pfsKey, 'XhairPickboxEtc', $00ffffff); pfsKey := subkey + '{#PROFILES}{#VERSION}' + '\General'; if (verM = '24') and (verS = '3') then str1 := sApp + '\R' + verM + '3;' + sApp + '\sys;' + sApp + '\dwb;' else str1 := sApp + '\R' + verM + '0;' + sApp + '\sys;' + sApp + '\dwb;'; str2 := getDefaultACADContent_ACAD(ver, Names[I]); RegWriteStringValue(HKCU, pfsKey, 'ACAD', str1 + str2); if intM > 18 then begin pfsKey := subkey + '{#PROFILES}{#VERSION}' + '\Variables'; RegWriteStringValue(HKCU, pfsKey, 'TRUSTEDPATHS', str1); end; end; end; end; end; end; procedure setCADProfilesKey_ZWCAD(verM:string); var key:string; subkey:string; Names: TArrayOfString; I: Integer; S: String; pfsKey: String; ver:String; sApp:String; str1:String; str2:String; intM:Integer; begin ver := verM; sApp := ExpandConstant('{app}'); intM := StrToInt(verM); if (hasCADVersion(ver, '{#REG_KEY_ZWCAD}')) then begin key := '{#REG_KEY_ZWCAD}' + ver + '\'; Log(key); if RegGetSubkeyNames(HKCU, key, Names) then begin S := ''; for I := 0 to GetArrayLength(Names)-1 do begin subkey := key + Names[I] + '\Profiles\'; Log(subkey); if RegKeyExists(HKEY_CURRENT_USER, subkey) then begin pfsKey := subkey + '{#PROFILES}{#VERSION}' + '\Config'; str1 := sApp + '\Z' + verM + ';' + sApp + '\sys;' + sApp + '\dwb;'; str2 := getDefaultACADContent_ZWCAD(ver, Names[I]); RegWriteStringValue(HKCU, pfsKey, 'ZWCADSEARCHPATH', str1 + str2); end; end; end; end; end; function getCadPath_ZWCAD(ver:string):string; var key:string; begin key:='{#REG_KEY_ZWCAD}' + ver + '\zh-CN\'; if RegKeyExists(HKCU, key) then begin RegQueryStringValue(HKLM, key, 'Location', Result); end else begin Result := ''; end; end; // 中望CAD 专版授权 procedure setAuthorizationInfomation_ZWCAD(verM:string; ProfileName:string); var key:string; subkey:string; Names: TArrayOfString; I: Integer; S: String; commResPath:String; resDllPath:String; begin if (hasCADVersion(verM, '{#REG_KEY_ZWCAD}')) then begin key := '{#REG_KEY_ZWCAD}' + verM + '\'; Log(key); if RegGetSubkeyNames(HKCU, key, Names) then begin S := ''; // ZWCAD\2024\... for I := 0 to GetArrayLength(Names)-1 do begin // ZWCAD\2024\zh-CN\Profiles\... subkey := key + Names[I] + '\Profiles\'; Log(subkey); if RegKeyExists(HKEY_CURRENT_USER, subkey) then begin commResPath := subkey + ProfileName + '\CommonSettings'; resDllPath := getCadPath_ZWCAD(verM) + 'zh-CN\ZwCustomRes.dll'; if (FileExists(resDllPath)) then begin RegWriteStringValue(HKCU, commResPath, 'CustomResFile', resDllPath); end; end; end; end; end; end; function IsVC2008RuntimeInstalled: boolean; var KeyPath , VC2008_guid1, VC2008_guid2 , VC2008_guid3, VC2008_guid4 :string; begin Result := False; KeyPath := 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\'; VC2008_guid1 := KeyPath + '{350AA351-21FA-3270-8B7A-835434E766AD}'; VC2008_guid2 := KeyPath + '{8220EEFE-38CD-377E-8595-13398D740ACE}'; VC2008_guid3 := KeyPath + '{4B6C7001-C7D6-3710-913E-5BC23FCE91E6}'; VC2008_guid4 := KeyPath + '{5FCE6D76-F5DC-37AB-B2B8-22AB8CEDB1D4}'; if RegKeyExists(HKLM, vc2008_guid1) or RegKeyExists(HKLM, vc2008_guid2) or RegKeyExists(HKLM, vc2008_guid3) or RegKeyExists(HKLM, vc2008_guid4) then begin Result := True; end; end; procedure unzipFile(dir:string; file:string); var UnzipCmd: String; ZipFilePath: String; ErrorCode: Integer; begin // 定义压缩包的具体路径 ZipFilePath := dir + '\' + file; UnzipCmd := 'x "' + ZipFilePath + '" -o"' + dir + '" -y'; // 调用 7za.exe 开始静默解压,代码会在这里阻塞,直到解压完成 Exec(ExpandConstant('{tmp}\7za.exe'), UnzipCmd, '', SW_HIDE, ewWaitUntilTerminated, ErrorCode); // 判断解压结果 if ErrorCode = 0 then begin // 解压成功,立即删除巨大的 7z 压缩包释放磁盘空间 if DeleteFile(ZipFilePath) then Log(file + ' 解压成功并已删除。') else Log('警告: 压缩包解压成功,但清理'+ file + ' 失败,可能文件被占用。'); end else begin // 解压失败时的处理 MsgBox('大型组件解压失败,请检查磁盘空间!错误码: ' + IntToStr(ErrorCode), mbError, MB_OK); end; end; procedure CurStepChanged(CurStep: TSetupStep); var ResultCode:Integer; begin if CurStep=ssinstall then //MsgBox('准备写入文件了', mbInformation, MB_OK); begin #ifdef ZWCAD #ifdef Z2023 setCADProfilesKey_ZWCAD('2023'); setAuthorizationInfomation_ZWCAD('2023', '{#PROFILES}{#VERSION}'); setAuthorizationInfomation_ZWCAD('2023', '<>'); setAuthorizationInfomation_ZWCAD('2023', 'Default'); #endif #ifdef Z2024 setCADProfilesKey_ZWCAD('2024'); setAuthorizationInfomation_ZWCAD('2024', '{#PROFILES}{#VERSION}'); setAuthorizationInfomation_ZWCAD('2024', '<>'); setAuthorizationInfomation_ZWCAD('2024', 'Default'); #endif #ifdef Z2025 setCADProfilesKey_ZWCAD('2025'); setAuthorizationInfomation_ZWCAD('2025', '{#PROFILES}{#VERSION}'); setAuthorizationInfomation_ZWCAD('2025', '<>'); setAuthorizationInfomation_ZWCAD('2025', 'Default'); #endif #ifdef Z2026 setCADProfilesKey_ZWCAD('2026'); setAuthorizationInfomation_ZWCAD('2026', '{#PROFILES}{#VERSION}'); setAuthorizationInfomation_ZWCAD('2026', '<>'); setAuthorizationInfomation_ZWCAD('2026', 'Default'); #endif #endif #ifdef ACAD // 18,19 平台由于需要调试,都加上 setCADProfilesKey_ACAD('18','0'); setCADProfilesKey_ACAD('18','1'); setCADProfilesKey_ACAD('18','2'); setCADProfilesKey_ACAD('19','0'); setCADProfilesKey_ACAD('19','1'); setCADProfilesKey_ACAD('19','2'); #ifdef R200 setCADProfilesKey_ACAD('20','0'); setCADProfilesKey_ACAD('20','1'); #endif #ifdef R210 setCADProfilesKey_ACAD('21','0'); #endif #ifdef R220 setCADProfilesKey_ACAD('22','0'); #endif #ifdef R230 setCADProfilesKey_ACAD('23','0'); setCADProfilesKey_ACAD('23','1'); #endif #ifdef R240 setCADProfilesKey_ACAD('24','0'); setCADProfilesKey_ACAD('24','1'); setCADProfilesKey_ACAD('24','2'); #endif #ifdef R243 setCADProfilesKey_ACAD('24','3'); #endif #ifdef R250 setCADProfilesKey_ACAD('25','0'); setCADProfilesKey_ACAD('25','1'); #endif #ifdef R260 setCADProfilesKey_ACAD('26','0'); #endif #endif end; if CurStep=ssPostinstall then begin WizardForm.StatusLabel.Caption := '正在解压核心组件,这可能需要几分钟,请耐心等待...'; WizardForm.ProgressGauge.Style := npbstMarquee; unzipFile(ExpandConstant('{app}\sys'), 'HugeDb.7z'); unzipFile(ExpandConstant('{app}\help'), 'HugeHelp.7z'); // 恢复正常进度条 WizardForm.ProgressGauge.Style := npbstNormal; end; if CurStep=ssDone then begin if IsVC2008RuntimeInstalled()=False then begin Exec(ExpandConstant('{app}\sys\' + '2008-vcredist_x64.exe'), '', '', SW_SHOW, ewWaitUntilTerminated, ResultCode); end; end; //MsgBox('软件成功安装', mbInformation, MB_OK); end; function deleteKey(ver:string;regkey:string):boolean; var key:string; subkey:string; Names: TArrayOfString; I: Integer; S: String; begin if not hasCADVersion(ver, regkey) then begin Result := false; exit; end; key := regkey + ver + '\'; Log(key); if RegGetSubkeyNames(HKCU, key, Names) then begin S := ''; for I := 0 to GetArrayLength(Names)-1 do begin subkey := key + Names[I] + '\Profiles\' + '{#PROFILES}{#VERSION}'; Log(subkey); if RegKeyExists(HKCU, subkey) then RegDeleteKeyIncludingSubkeys(HKCU, subkey); end; end; end; procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep); begin #ifdef ZWCAD deleteKey('2023', '{#REG_KEY_ZWCAD}'); deleteKey('2024', '{#REG_KEY_ZWCAD}'); deleteKey('2025', '{#REG_KEY_ZWCAD}'); deleteKey('2026', '{#REG_KEY_ZWCAD}'); #endif #ifdef ACAD deleteKey('18.0', '{#REG_KEY_ACAD}'); deleteKey('18.1', '{#REG_KEY_ACAD}'); deleteKey('18.2', '{#REG_KEY_ACAD}'); deleteKey('19.0', '{#REG_KEY_ACAD}'); deleteKey('19.1', '{#REG_KEY_ACAD}'); deleteKey('19.2', '{#REG_KEY_ACAD}'); deleteKey('20.0', '{#REG_KEY_ACAD}'); deleteKey('20.1', '{#REG_KEY_ACAD}'); deleteKey('21.0', '{#REG_KEY_ACAD}'); deleteKey('22.0', '{#REG_KEY_ACAD}'); deleteKey('23.0', '{#REG_KEY_ACAD}'); deleteKey('23.1', '{#REG_KEY_ACAD}'); deleteKey('24.0', '{#REG_KEY_ACAD}'); deleteKey('24.1', '{#REG_KEY_ACAD}'); deleteKey('24.2', '{#REG_KEY_ACAD}'); deleteKey('24.3', '{#REG_KEY_ACAD}'); deleteKey('25.0', '{#REG_KEY_ACAD}'); deleteKey('25.1', '{#REG_KEY_ACAD}'); deleteKey('26.0', '{#REG_KEY_ACAD}'); #endif end;