Inno Setup制作应用程序安装包
我最近写了一个MFC应用程序,想发给其他的小伙伴玩一玩,直接发了个exe文件过去,结果发现小伙伴那边打不开。原来这个exe文件虽然是MFC静态编译的,但是还依赖了其他几个.dll文件,需要把这几个dll文件和exe文件放在同一个目录下,才能正常打开。这也没什么,后来发现还不行?跳出来一个提示框,大意是在某个路径下没有找到需要的文件(这个程序基于其他软件的开发包,所以就会在没有安装该软件的电脑上出现这样的提示)。。。那怎么解决呢?难道移植到其他电脑的时候,还要手动复制文件到指定的目录。。。
更便捷的办法,就是把这些文件打包成一个安装文件。这样,在安装过程中,就可以把文件复制到指定的目录,而且不需要的时候还可以把这个程序完整地卸载掉。
选择安装包制作软件的时候,由于VS2013没有自带的安装包软件,第三方的Install Sheild又是个收费的软件,申请试用版也比较繁琐,我最终选了Inno Install这个小巧的免费程序,简单易用,功能对 我来说也已足够。这里是Inno Setup官方下载地址:http://www.jrsoftware.org/isdl.php。注意,这个是英文版的,想要中文版的可以到网上找找。
Inno Setup的具体使用,可以参考这篇文章“快速打包你的应用程序——Inno Setup”
通过以上,基本就可以使用啦。
有一个小小的不足,就是安装程序之后,生成的卸载文件的名字是unins000.exe等等。而且Inno Setup制作的安装包,可以允许同一个程序在同一个目录下安装多次。要修正这点不足,可以在通过向导自动生成.iss文件后,在文件中添加一些代码。
1、首先预定义卸载文件的文件名,在文件开头的#define部分添加
#define MyAppUninstallExeName "Uninstall.exe"
2、创建卸载图标,在[Icons]部分添加(如果已经在制作向导时勾选创建卸载图标,那么这一句应该会自动生成,不必手动添加了)
Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{app}\{#MyAppUninstallExeName}"
3、执行代码,改变卸载文件的文件名。在[Run]部分的前面添加
[Code] procedure CurStepChanged(CurStep: TSetupStep); var uninspath,uninsname,NewUninsName,MyAppName:string; begin if CurStep=ssDone then begin NewUninsName := 'Uninstall'; MyAppName:= 'Measurement'; uninspath:=ExtractFilePath(ExpandConstant('{uninstallexe}')); uninsname:=Copy(ExtractFileName(ExpandConstant('{uninstallexe}')),1,8); RenameFile(uninspath+uninsname+'.exe',uninspath+NewUninsName+'.exe'); RenameFile(uninspath+uninsname+'.dat',uninspath+NewUninsName+'.dat'); if RegKeyExists(HKEY_LOCAL_MACHINE,'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\'+MyAppName+'\_is1') then begin RegWriteStringValue(HKEY_LOCAL_MACHINE,'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall'+MyAppName+'_is1','UninstallString','"'+uninspath+NewUninsName+'.exe"'); RegWriteStringValue(HKEY_LOCAL_MACHINE,'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall'+MyAppName+'_is1','QuietUninstallString','"'+uninspath+NewUninsName+'.exe"/SILENT'); end ; end ; end ;
这里我的App名字是Measurement,根据自己的情况可以给它赋成自己的AppName。
4、使用Inno Setup打包安装程序还有一些问题,比如重复安装检测和.net框架安装检测等等。这些问题都可以到网上找到解决方案。
以上两个问题可以参考这篇文章来解决,使用inno setup打包程序完整脚本(.net框架检测,重复安装检测)