InnoSetup打包详解
▎关于打包的目的和原理
VSTO插件开发完成后,为了更好的分发给用户进行安装使用,需要进行对插件打包的过程。
打包的目的有两个:①对插件使用到的文件封装成exe②修改注册表,达到使插件自动加载的目的。
其中第二条,打包的时候修改注册表。针对不同的程序,修改的注册表内容不同。
▶Excel:修改HKEY_CURRENT_USER,Software\Microsoft\Office\Excel\Addins路径下的内容。比如我的插件叫Exceltools,我就要对以下条目进行相应修改。
RegWriteStringValue(HKEY_CURRENT_USER,'Software\KingSoft\Office\ET\AddinsWL','exceltools','')
RegWriteStringValue(HKEY_CURRENT_USER, 'Software\Microsoft\Office\Excel\Addins\exceltools', 'Description', 'exceltools');
RegWriteStringValue(HKEY_CURRENT_USER, 'Software\Microsoft\Office\Excel\Addins\exceltools', 'FriendlyName', 'exceltools');
RegWriteDWordValue(HKEY_CURRENT_USER, 'Software\Microsoft\Office\Excel\Addins\exceltools', 'LoadBehavior', 3);
RegWriteStringValue(HKEY_CURRENT_USER, 'Software\Microsoft\Office\Excel\Addins\exceltools', 'Manifest',ExpandConstant('{app}')+'\exceltools.vsto|vstolocal');
其中下面这一条是为了WPS成功加载插件
RegWriteStringValue(HKEY_CURRENT_USER,'Software\KingSoft\Office\ET\AddinsWL','exceltools','')
如果是Word插件,将上面的Excel改成Word即可。PowerPoint插件,将上面的Excel改成PowerPoint即可。
▶AutoCAD:修改HKEY_LOCAL_MACHINE,'SOFTWARE\Autodesk\AutoCAD\R19.1\ACAD-D001:804\Applications\路径下的内容。
比如我的插件叫CADTools,我就要对以下条目进行相应修改。
RegWriteStringValue(HKEY_LOCAL_MACHINE,'SOFTWARE\Autodesk\AutoCAD\R19.1\ACAD-D001:804\Applications\CADTools','LOADER',
ExpandConstant('{app}')+'\CADTools.dll');
RegWriteStringValue(HKEY_LOCAL_MACHINE,'SOFTWARE\Autodesk\AutoCAD\R19.1\ACAD-D001:804\Applications\CADTools','DESCRIPTION', '使CADTools随CAD启动!');
RegWriteDWordValue(HKEY_LOCAL_MACHINE,'SOFTWARE\Autodesk\AutoCAD\R19.1\ACAD-D001:804\Applications\CADTools','LOADCTRLS', 2);
RegWriteDWordValue(HKEY_LOCAL_MACHINE,'SOFTWARE\Autodesk\AutoCAD\R19.1\ACAD-D001:804\Applications\CADTools','MANAGED', 1);
其中R19.1\ACAD-D001:804代表的是AutoCad的版本。根据不同的版本修改相应的注册表路径。
序号 | 版本号1 | 版本号2 | 描述 |
---|---|---|---|
1 | R15.0 | 1:804 | 2002中文版 |
2 | R15.0 | 1:409 | 2002英文版 |
3 | R16.0 | 201:804 | 2004中文版 |
4 | R16.0 | 201:409 | 2004英文版 |
5 | R16.1 | 301:804 | 2005中文版 |
6 | R16.1 | 301:409 | 2005英文版 |
7 | R16.2 | 4001:804 | 2006中文版 |
8 | R16.2 | 4001:409 | 2006英文版 |
9 | R17.0 | 5001:804 | 2007中文版 |
10 | R17.0 | 5001:409 | 2007英文版 |
11 | R17.1 | 6001:804 | 2008中文版 |
12 | R17.1 | 6001:409 | 2008英文版 |
13 | R17.2 | 7001:804 | 2009中文版 |
14 | R17.2 | 7001:409 | 2009英文版 |
15 | R18.0 | 8001:804 | 2010中文版 |
16 | R18.0 | 8001:409 | 2010英文版 |
17 | R18.1 | 9001:804 | 2011中文版 |
18 | R18.1 | 9001:409 | 2011英文版 |
19 | R18.2 | A001:804 | 2012中文版 |
20 | R18.2 | A001:409 | 2012英文版 |
21 | R18.0 | 8001:804 | AutoCAD 2010 |
22 | R18.1 | 9001:804 | AutoCAD 2011 |
23 | R18.2 | A001:804 | AutoCAD 2012 |
24 | R19.0 | B001:804 | AutoCAD 2013 |
25 | R19.1 | D001:804 | AutoCAD 2014 |
26 | R20.0 | E001:804 | AutoCAD 2015 |
▎InnoSetup常见语句解析
[Setup]常规参数
#define MyAppName "CADTools"
#define MyAppVerName "CADTools 1.0"
[Setup]
//插件名
AppName={#MyAppName}
//版本
AppVerName={#MyAppVerName}
//版本号
AppVersion=1.0
VersionInfoProductName=CADTools
//默认安装路径
DefaultDirName= "d:\Program Files\CADTools"
DisableDirPage=no
DisableProgramGroupPage=yes
DefaultGroupName=CADTools
OutputDir=.
//安装包图标
SetupIconFile=A.ico
OutputBaseFilename=CADTools
WindowShowCaption=no
DisableWelcomePage=no
//控制面板卸载界面图标
UninstallDisplayIcon= {app}\A.ico
//安装界面左侧图片
WizardImageFile =Office2007.bmp
//安装界面右上角小logo
WizardSmallImageFile=A.bmp
//发布者名称
AppPublisher=VBA说
//禁止64位系统写入注册表时的重定向
ArchitecturesInstallIn64BitMode=x64 ia64
安装完成之后运行指定程序
[Run]
Filename: "{app}\GAME.exe"; Flags: nowait skipifsilent
nowait – 不等待完成就处理下一个条目。
skipifsilent — 如果后台运行则不提示点击“完成”。
安装包使用中文
[Languages]
Name: "chinesesimplified"; MessagesFile: "compiler:Languages\ChineseSimplified.isl"
把安装自动注册dll文件
dll文件放到安装目录下顺便注册
[Files]
Source: "..\x64\Release\sdUkey.dll"; DestDir: "{app}"; Flags: ignoreversion restartreplace uninsrestartdelete regserver
安装过程静默安装第三方安装包
释放安装包到安装目录后执行安装相关函数
[Files]
Source: ".\ePass3003-SimpChinese.exe"; DestDir: "{tmp}"; AfterInstall: RunInstaller
执行的函数内容
[Code]
procedure RunInstaller;
var
ResultCode: Integer;
begin
if not Exec(ExpandConstant(CurrentFileName), '/S', '', SW_SHOWNORMAL ,
ewWaitUntilTerminated, ResultCode)
then
MsgBox('Other installer failed to run!' + #13#10 +
SysErrorMessage(ResultCode), mbError, MB_OK);
end;
相关目录说明
目录 |
目录说明 |
{tmp} |
第三方安装包安装过程存放临时文件的 |
{app} |
用户选择的安装目录 |
{sys} |
系统目录system32或者sysWOW64目录 |
▎InnoSetup打包作品欣赏
作品一:自动检测VSTO运行环境
VSTO插件需要两个必备运行环境:Microsoft .NET Framework 或者更高和Visual Studio 2010 Tools for Office Runtime。兼容性问题Microsoft .NET Framework我们一般选择4.0或者更高。
思路:
用注册表判断Framework4.0是否存在;
用注册表判断Office版本,来间接判断是否需要安装Visual Studio 2010 Tools for Office Runtime(因为Excel2013或者更高版本,无需安装该环境)。
下面的插件可以自动检测以上两个环境,如果本机未安装,则直接网上下载,引导用户安装。
作品二:美化安装界面(仿有道云笔记)
辛苦搜集到的一个美化模板,仿有道云笔记安装过程的。可以根据自己的需求更改里面的图片素材定制。
作品三:美化安装界面(仿QQ2013)
仿QQ2013的安装界面,同上一个例子,修改图片素材即可。
作品四:美化安装界面(简单美化)
①开始安装
②安装过程
③安装完成
④卸载界面
知识无价,时间无价,需要以上InnoSetup打包模板的可私信作者付费分享。