安装包一般是桌面程序使用的较多,当然很多服务端的部署也可以制作安装包以方便部署,总之就是将部署所需要的所有资源打包在一个可执行文件里,在安装的时候解压复制到指定的安装目标,并配置相应需要的一些环境,创建快捷方式等等。
一般一个安装包在执行安装大致的过程分为几个步骤:
1.安装之前的一些清理工作,比如关闭一些正在执行的程序,清理注册表等
2.解压并复制资源到指定的位置
3.注册一些注册表项
4.创建一些快捷方式
5.安装完成之后的清理工作将一些安装过程的辅助文件删除
6.启动程序或者打开一些说明文档之类的
7.结束
Inno Setup是声名试的写法,下面是个例子
[Setup]
AppName=全栈工程师
AppVersion=v1.12
AppCopyright=全栈工程师
AppPublisher=全栈工程师
DefaultDirName={pf}\chrome
DefaultGroupName=全栈工程师
UninstallDisplayIcon={app}\unins000.exe
UninstallDisplayName=卸载全栈工程师
Uninstallable=true
OutputBaseFilename=全栈工程师v1.12
Compression=lzma
SolidCompression=yes
ArchitecturesInstallIn64BitMode=x64
DisableDirPage=yes
DisableProgramGroupPage=yes
DisableWelcomePage=yes
PrivilegesRequired=admin
CloseApplications=yes
CloseApplicationsFilter=chrome.exe
ChangesEnvironment=yes
[Languages]
Name: "Chinese"; MessagesFile: "compiler:Languages\Chinese.isl"
[Files]
Source: "app\Chrome\*"; DestDir: "{app}\Chrome"; Flags: ignoreversion recursesubdirs;
Source: "app\shared\*"; DestDir: "{app}\shared"; Flags: ignoreversion recursesubdirs;
Source: "app\msvcp100.dll"; DestDir: "{sys}"; Flags:onlyifdoesntexist;
Source: "app\msvcr100.dll"; DestDir: "{sys}"; Flags:onlyifdoesntexist;
Source: "app\msvcp100.dll"; DestDir: "{syswow64}";Flags:64bit onlyifdoesntexist; Check: Is64BitInstallMode;
Source: "app\msvcr100.dll"; DestDir: "{syswow64}";Flags:64bit onlyifdoesntexist; Check: Is64BitInstallMode;
[Icons]
Name: "{group}\卸载"; Filename:"{app}\unins000.exe";
Name: "{group}\全栈工程师";Comment: "全栈工程师"; Filename: "{app}\StartChrome.exe";
Name: "{commondesktop}\全栈工程师";Comment: "全栈工程师"; Filename: "{app}\StartChrome.exe";
[Run]
Filename: "{app}\StartChrome.exe"; WorkingDir:"{app}"; Description: "启动 全栈工程师";Flags: postinstall nowait skipifsilent runascurrentuser;
[InstallDelete]
Type:"filesandordirs";Name:"{userappdata}\ChromeProfile"
[UninstallRun]
[UninstallDelete]
Type:"filesandordirs";Name:"{app}"
Type:"filesandordirs";Name:"{group}"
Type:"filesandordirs";Name:"{commondesktop}\全栈工程师.exe"
Type:"filesandordirs";Name:"{userappdata}\ChromeProfile"
[Registry]
Root: HKLM; Subkey:"SYSTEM\CurrentcontrolSet\Control\Session Manager\Environment"; ValueType: string; ValueName: "GOOGLE_API_KEY"; ValueData: " ";Flags:uninsdeletevalue noerror;
Root: HKLM; Subkey:"SYSTEM\CurrentcontrolSet\Control\Session Manager\Environment"; ValueType: string; ValueName: "GOOGLE_DEFAULT_CLIENT_ID"; ValueData: " ";Flags:uninsdeletevalue noerror;
Root: HKLM; Subkey:"SYSTEM\CurrentcontrolSet\Control\Session Manager\Environment"; ValueType: string; ValueName: "GOOGLE_DEFAULT_CLIENT_SECRET"; ValueData: " ";Flags:uninsdeletevalue noerror;
[code]
function KillApp():Boolean;
var ErrorCode: Integer;
begin
//
ShellExec('open','taskkill.exe','/f /im iexplore.exe','',SW_HIDE,ewNoWait,ErrorCode);
ShellExec('open','tskill.exe',' iexplore.exe','',SW_HIDE,ewNoWait,ErrorCode);
ShellExec('open','taskkill.exe','/f /im ZhuDongFangYu.exe','',SW_HIDE,ewNoWait,ErrorCode);
ShellExec('open','tskill.exe',' ZhuDongFangYu.exe','',SW_HIDE,ewNoWait,ErrorCode);
Result := true;
//
end;
function InitializeSetup():Boolean;
begin
Result := KillApp();
end;
function InitializeUninstall():Boolean;
begin
Result := KillApp();
end;
新建个文件夹,将上面的例子的文本保存为一个扩展名为.iss的文件,将需要部署的文件都放在一个app的文件夹里,如下图:
来看看几个关键的地方基本概念
[Setup]
是安装的一些基本配置,从变量名大致都能理解是什么意思,其中几个关键点解释一下
DefaultDirName={pf}\chrome