; 脚本由 Inno Setup 脚本向导生成。 ; 有关创建 Inno Setup 脚本文件的详细信息,请参阅帮助文档! ; 定义应用程序的名称 #define MyAppName "SzmediTools" ; 定义应用程序的版本号 #define MyAppVersion "2.2.3.82" ; 定义应用程序的发布者 #define MyAppPublisher "SZMEDI" ; 定义应用程序的网址 #define MyAppURL "https://www.szmedi.com.cn/" ; 定义应用程序的可执行文件名 #define MyAppExeName "MyProg-x64.exe" #define MyDllName "Szmedi.RvKits" [Setup] ; 注意:AppId 的值唯一标识此应用程序。不要在其他应用程序的安装程序中使用相同的 AppId 值。 ; (若要生成新的 GUID,请在 IDE 中单击 "工具|生成 GUID"。) AppId={{C7E6D9E9-B211-428D-A429-D23DD5B56DE6} ; 程序名称 AppName={#MyAppName} ; 版本 AppVersion={#MyAppVersion} ; AppVerName={#MyAppName} {#MyAppVersion} AppPublisher={#MyAppPublisher} AppPublisherURL={#MyAppURL} AppSupportURL={#MyAppURL} AppUpdatesURL={#MyAppURL} ;控制面板显示的名称 UninstallDisplayName={#MyAppName} ;安装包构建模型 ArchitecturesInstallIn64BitMode=x64os ;管理员权限 PrivilegesRequired=admin ; 是否创建应用程序目录 CreateAppDir=no ; 许可证文件路径 LicenseFile=.\bin\Release\2018\license.txt ; 安装前显示的信息文件路径 ;InfoBeforeFile=.\bin\Release\2018\Readme.txt ; 安装后显示的信息文件路径 ;InfoAfterFile=.\bin\Release\2018\Readme.txt ; 取消对以下行的注释以在非管理安装模式下运行(仅针对当前用户进行安装)。 ; PrivilegesRequired=lowest ; exe输出目录 OutputDir=.\Setup ; 输出文件名 OutputBaseFilename={#MyAppName}{#MyAppVersion} ; 密码 ;Password=SZMEDI ; 是否加密 ;Encryption=yes ; 压缩方式 Compression=lzma ;Compression=zip ; 是否使用固体压缩 SolidCompression=yes ; 向导样式 WizardStyle=modern [Files] ; 源文件路径和目标目录 Source: ".\bin\Release\2018\*"; DestDir: "C:\ProgramData\Autodesk\ApplicationPlugins\Szmedi.RvKits.bundle\Contents\2018"; Flags: ignoreversion recursesubdirs createallsubdirs ; Source: "I:\04 程序开发\Revit Dev\Szmedi.RvKit\bin\Release\2019\*"; DestDir: "C:\ProgramData\Autodesk\ApplicationPlugins\Szmedi.RvKits.bundle\Contents\2019"; Flags: ignoreversion recursesubdirs createallsubdirs Source: ".\bin\Release\2020\*"; DestDir: "C:\ProgramData\Autodesk\ApplicationPlugins\Szmedi.RvKits.bundle\Contents\2020"; Flags: ignoreversion recursesubdirs createallsubdirs Source: ".\bin\Szmedi.RvKits.bundle\*"; DestDir: "C:\ProgramData\Autodesk\ApplicationPlugins\Szmedi.RvKits.bundle"; Flags: ignoreversion recursesubdirs createallsubdirs ; 注意:不要在任何共享系统文件上使用 "Flags: ignoreversion" [Code] [Code] const AddinFileName = 'Szmedi.RvKits.addin'; // 日志函数,用于调试 procedure Log(const Msg: string); begin MsgBox(Msg, mbInformation, MB_OK); end; // 检查目录是否存在,如果不存在则创建 procedure CreateDirectoryIfNotExists(const Dir: string); begin if not DirExists(Dir) then begin if not CreateDir(Dir) then begin Log('目录创建失败: ' + Dir); Exit; end; Log('目录创建成功: ' + Dir); end; end; // 检查文件是否可写 function IsFileWritable(const FileName: string): Boolean; begin Result := False; try if FileExists(FileName) then begin // 尝试写入文件 SaveStringToFile(FileName, 'test', False); Result := True; end else begin // 文件不存在,可以创建 Result := True; end; except Log('文件不可写: ' + FileName); end; end; // 覆写或创建 .addin 文件 procedure ReplaceAddinFileContentForVersion(Version: String); var AddinFile: TStringList; FullPath: string; DirPath: string; begin FullPath := ExpandConstant('{commonappdata}\Autodesk\ApplicationPlugins\Szmedi.RvKits.bundle\Contents\' + Version + '\' + AddinFileName); //Log('addin文件路径: ' + FullPath); // 检查目录是否存在,如果不存在则创建 DirPath := ExtractFilePath(FullPath); CreateDirectoryIfNotExists(DirPath); // 检查文件是否可写 if not IsFileWritable(FullPath) then begin Log('文件不可写: ' + FullPath); Exit; end; // 创建并写入文件内容 AddinFile := TStringList.Create; try AddinFile.Add(''); AddinFile.Add(''); AddinFile.Add(' '); AddinFile.Add(' {#MyAppName}'); AddinFile.Add(' {#MyDllName}.dll'); AddinFile.Add(' A4158476-0BF7-4E42-84B3-30B4423E8B8A'); AddinFile.Add(' {#MyDllName}.UIApp.UIRibbon'); AddinFile.Add(' {#MyAppPublisher}'); AddinFile.Add(' {#MyAppPublisher},{#MyAppURL}'); AddinFile.Add(' '); AddinFile.Add(''); // 保存文件 AddinFile.SaveToFile(FullPath); //Log('文件成功写入: ' + FullPath); except Log('文件写入失败: ' + FullPath + ' - ' + GetExceptionMessage); finally AddinFile.Free; end; end; // 在安装完成后调用 procedure CurStepChanged(CurStep: TSetupStep); var RevitVersions: TArrayOfString; // 动态数组 i: Integer; begin if CurStep = ssPostInstall then begin // 初始化 Revit 版本数组 SetArrayLength(RevitVersions, 2); // 设置数组长度 RevitVersions[0] := '2018'; //RevitVersions[1] := '2019'; RevitVersions[1] := '2020'; //RevitVersions[3] := '2021'; // 遍历每个版本并处理 for i := 0 to GetArrayLength(RevitVersions) - 1 do begin ReplaceAddinFileContentForVersion(RevitVersions[i]); end; end; end;