)
从代码到产品用Inno Setup打造SolidWorks插件的专业安装体验在SolidWorks二次开发领域许多开发者投入大量精力完善插件功能却在最后交付环节草草了事——简单复制DLL文件搭配批处理脚本的方式不仅显得业余更给终端用户带来诸多不便。本文将系统介绍如何通过Inno Setup将C#开发的SolidWorks插件转化为具有完整安装/卸载流程的专业Windows安装包并实现与Visual Studio的无缝集成构建真正的一键发布工作流。1. 为什么需要专业安装包当开发者完成一个功能完善的SolidWorks插件后通常会面临如何分发给团队或客户的问题。传统的手动注册方式存在几个明显缺陷用户体验差非技术用户对运行bat脚本存在天然恐惧缺乏版本管理无法跟踪已安装的插件版本卸载不彻底手动卸载容易残留注册表项和文件权限问题Windows 10/11的UAC机制可能导致注册失败专业安装包的价值不仅在于提升产品形象更重要的是解决上述痛点。Inno Setup作为轻量级安装包制作工具具有以下优势特性传统方式Inno Setup方案安装体验需手动操作图形化向导卸载支持需单独脚本集成卸载程序权限处理需管理员手动授权自动提权版本控制无内置版本管理依赖检查无可检测.NET框架2. Inno Setup核心配置详解2.1 基础脚本结构Inno Setup脚本(.iss)采用类INI文件格式以下是一个典型SolidWorks插件安装包的核心结构[Setup] AppNameMySolidWorksPlugin AppVersion1.0 DefaultDirName{pf}\MySolidWorksPlugin DefaultGroupNameMySolidWorksPlugin OutputDir.\Output OutputBaseFilenameSetup_MyPlugin Compressionlzma SolidCompressionyes PrivilegesRequiredadmin [Files] Source: ..\bin\Release\*.dll; DestDir: {app}; Flags: ignoreversion Source: RegAsm.exe; DestDir: {app}; Flags: ignoreversion [Run] Filename: {app}\RegAsm.exe; Parameters: {app}\SolidWorksAddin.dll /codebase; StatusMsg: Registering COM component...; Flags: runhidden [UninstallRun] Filename: {app}\RegAsm.exe; Parameters: {app}\SolidWorksAddin.dll /u; Flags: runhidden关键参数说明PrivilegesRequiredadmin确保以管理员权限运行Flagsignoreversion避免DLL版本冲突{app}表示安装目录的宏runhidden静默执行注册过程2.2 解决Windows权限问题现代Windows系统的安全机制可能导致插件加载失败需要在安装时正确设置目录权限[Dirs] Name: {app}; Permissions: users-modify [Registry] Root: HKLM; Subkey: SOFTWARE\SolidWorks\Addins\{{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}}; ValueType: string; ValueName: Description; ValueData: My Plugin; Flags: uninsdeletekey Root: HKLM; Subkey: SOFTWARE\SolidWorks\Addins\{{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}}; ValueType: dword; ValueName: Title; ValueData: 1; Flags: uninsdeletekey提示GUID值需与插件类的[Guid]属性完全一致3. 自动化构建集成3.1 Visual Studio生成后事件要实现编译即发布的自动化流程需要在VS项目中配置生成后事件if $(ConfigurationName) Release ( C:\Program Files (x86)\Inno Setup 6\ISCC.exe $(ProjectDir)SetupScript.iss /DAppVersion$(AssemblyVersion) xcopy /Y $(ProjectDir)Output\*.exe \\BuildServer\Releases\ )此脚本实现三个功能仅在Release配置下触发打包将程序集版本传递给安装包自动拷贝安装包到共享目录3.2 进阶版本管理通过MSBuild任务可实现更精细的版本控制Target NamePostBuild AfterTargetsPostBuildEvent GetAssemblyIdentity AssemblyFiles$(TargetPath) Output TaskParameterAssemblies ItemNameAssemblyInfo/ /GetAssemblyIdentity PropertyGroup AssemblyVersion%(AssemblyInfo.Version)/AssemblyVersion /PropertyGroup Exec Command$(ProgramFiles)\Inno Setup 6\ISCC.exe $(ProjectDir)Setup.iss /DAppVersion$(AssemblyVersion) /DAppPath$(TargetDir)/ /Target4. 安装包增强功能4.1 多语言支持Inno Setup原生支持多语言界面只需在脚本中添加[Languages] Name: en; MessagesFile: compiler:Default.isl Name: zh; MessagesFile: compiler:Languages\ChineseSimplified.isl [CustomMessages] en.InstallForAllUsersInstall for all users zh.InstallForAllUsers为所有用户安装4.2 运行环境检测确保目标系统满足插件要求[Code] function InitializeSetup(): Boolean; begin if not IsDotNetInstalled(net452, 0) then begin MsgBox(This plugin requires .NET Framework 4.5.2, mbError, MB_OK); Result : False; end else Result : True; end;4.3 静默安装支持为便于企业部署可添加静默安装参数[Setup] ... SetupLoggingyes [Run] ... Filename: {app}\Register.bat; Parameters: /silent; Flags: runhidden skipifsilent5. 调试与问题排查即使精心设计的安装包也可能遇到各种环境问题以下是几个常见场景的解决方案插件未出现在SolidWorks中检查注册表项是否正确写入确认DLL已成功注册使用regasm /tlb生成类型库查看SolidWorks加载日志%temp%\solidworks_loading.log权限不足导致加载失败[Registry] Root: HKLM; Subkey: SOFTWARE\SolidWorks\Addins; Permissions: users-full版本冲突处理[Files] Source: *.dll; DestDir: {app}; Flags: ignoreversion sharedfile在实际项目中我发现最稳妥的做法是在安装完成后添加一个验证步骤[Run] Filename: {sys}\cmd.exe; Parameters: /C {app}\VerifyInstall.bat; Description: Verify installation; Flags: postinstall runhidden这个bat脚本可以检查注册状态、文件权限等关键指标确保插件能够正常加载。