; 脚本由 Inno Setup 脚本向导生成。 ; 有关创建 Inno Setup 脚本文件的详细信息,请参阅帮助文档! #define MyAppName "RingPlacement" #define MyAppVersion "1.0.0.0" #define MyAppPublisher "SZMEDI" #define MyAppURL "" #define MyAppExeName "RingPlacement.exe" [Setup] ; 注意:AppId 的值唯一标识此应用程序。不要在其他应用程序的安装程序中使用相同的 AppId 值。 ; (若要生成新的 GUID,请在 IDE 中单击 "工具|生成 GUID"。) AppId={{324CFC31-9E72-4500-AB7F-A72220E13DF8} AppName={#MyAppName} AppVersion={#MyAppVersion} ;AppVerName={#MyAppName} {#MyAppVersion} AppPublisher={#MyAppPublisher} AppPublisherURL={#MyAppURL} AppSupportURL={#MyAppURL} AppUpdatesURL={#MyAppURL} UninstallDisplayName={#MyAppName} ;DefaultDirName={code:GetInstallPath}\MSDevTool ArchitecturesInstallIn64BitMode=x64compatible CreateAppDir=no LicenseFile=.\bin\Release\License.txt InfoBeforeFile=.\bin\Release\License.txt InfoAfterFile=.\bin\Release\License.txt ; 取消对以下行的注释以在非管理安装模式下运行(仅针对当前用户进行安装)。 PrivilegesRequired=admin OutputDir=.\Setup OutputBaseFilename={#MyAppName} Compression=lzma SolidCompression=yes WizardStyle=modern [Files] ;Source: ".\bin\Release\*"; DestDir: "{code:GetInstallPath}\MSDevTool"; Flags: ignoreversion(创建子文件夹) recursesubdirs(递归子文件夹) createallsubdirs Source: ".\bin\Release\*"; DestDir: "{code:GetInstallPath}\RingPlacementAddin"; Flags: ignoreversion recursesubdirs createallsubdirs ;Source: ".\bin\Release\Config\MSDevTool.dgnlib"; DestDir: "C:\ProgramData\Bentley\MicroStation 2024\Configuration\Organization\Dgnlib\Gui"; Flags: ignoreversion recursesubdirs createallsubdirs Source: ".\bin\Release\RingPlacementAddin.cfg"; DestDir: "{code:GetInstallPath}\config\appl"; Flags: ignoreversion ; 注意:不要在任何共享系统文件上使用 "Flags: ignoreversion" [Code] var GlobalInstallPath: string; // 全局变量存储安装路径 // 主检查函数:验证安装状态并获取路径 function InitializeSetup(): Boolean; var RootKey: Integer; SubKeys: TArrayOfString; i: Integer; CurrentKey: string; begin Result := False; RootKey := HKLM64; // 检查主注册表项是否存在 if RegKeyExists(RootKey, 'SOFTWARE\Bentley\MicroStation') then begin // 获取所有GUID子项 if RegGetSubkeyNames(RootKey, 'SOFTWARE\Bentley\MicroStation', SubKeys) then begin // 遍历所有GUID子项 for i := 0 to GetArrayLength(SubKeys) - 1 do begin CurrentKey := 'SOFTWARE\Bentley\MicroStation\' + SubKeys[i]; // 检查是否存在安装路径参数 if RegValueExists(RootKey, CurrentKey, 'ProgramPath') and RegQueryStringValue(RootKey, CurrentKey, 'ProgramPath', GlobalInstallPath) then begin Result := True; Break; // 找到有效路径即终止循环 end; end; end; end; // 未找到有效安装 if not Result then begin MsgBox('未检测到 MicroStation 安装,安装程序将退出。', mbCriticalError, MB_OK); Exit; end; // 额外验证目录物理存在 if not DirExists(GlobalInstallPath) then begin MsgBox('检测到无效安装路径:' + GlobalInstallPath, mbError, MB_OK); Result := False; end; end; // 直接返回已存储的路径 function GetInstallPath(Param: string): string; begin Result := GlobalInstallPath; end;