博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Inno Setup制作应用程序安装包
阅读量:6982 次
发布时间:2019-06-27

本文共 2036 字,大约阅读时间需要 6 分钟。

我最近写了一个MFC应用程序,想发给其他的小伙伴玩一玩,直接发了个exe文件过去,结果发现小伙伴那边打不开。原来这个exe文件虽然是MFC静态编译的,但是还依赖了其他几个.dll文件,需要把这几个dll文件和exe文件放在同一个目录下,才能正常打开。这也没什么,后来发现还不行?跳出来一个提示框,大意是在某个路径下没有找到需要的文件(这个程序基于其他软件的开发包,所以就会在没有安装该软件的电脑上出现这样的提示)。。。那怎么解决呢?难道移植到其他电脑的时候,还要手动复制文件到指定的目录。。。

更便捷的办法,就是把这些文件打包成一个安装文件。这样,在安装过程中,就可以把文件复制到指定的目录,而且不需要的时候还可以把这个程序完整地卸载掉。

选择安装包制作软件的时候,由于VS2013没有自带的安装包软件,第三方的Install Sheild又是个收费的软件,申请试用版也比较繁琐,我最终选了Inno Install这个小巧的免费程序,简单易用,功能对 我来说也已足够。这里是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);varuninspath,uninsname,NewUninsName,MyAppName:string;beginif CurStep=ssDone thenbeginNewUninsName := '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') thenbeginRegWriteStringValue(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框架安装检测等等。这些问题都可以到网上找到解决方案。

以上两个问题可以参考这篇文章来解决,

 

转载于:https://www.cnblogs.com/tt2015-sz/p/4704772.html

你可能感兴趣的文章
让“云”无处不在-Citrix Xenserver之一 环境搭建
查看>>
CentOS 5.5下LVM的分区管理
查看>>
Vsftp与PAM虚拟用户
查看>>
GoogleAppEngine是什么?
查看>>
利用 UML 进行实体关系建模
查看>>
WCF中的Stream操作
查看>>
.NET实现之(WebService数据提供程序)
查看>>
Spread for Windows Forms快速入门(8)---单元格中用户动作触发的事件
查看>>
XXX管理平台系统——概要
查看>>
常用思科设备图标(JPG+矢量图)
查看>>
倒排列表求交集算法 包括baeza yates的交集算法
查看>>
微信 登录 Scope 参数错误或没有 Scope 权限
查看>>
C# 温故知新 基础篇(7) 接口<思维导图>
查看>>
jQuery Makes Parsing XML Easy[转]
查看>>
CSS里常见的块级元素和行内元素
查看>>
Windows Azure Storage (4) Windows Azure Storage Service存储服务之Blob Share Access Signature
查看>>
framework调试
查看>>
java线程(2)--同步和锁
查看>>
Rafy 框架 - 大批量导入实体
查看>>
go1
查看>>