我最近写了一个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}')),,);
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框架检测,重复安装检测)

Inno Setup制作应用程序安装包的更多相关文章

  1. 用Inno Setup制作WEB程序安装包

    原文 用Inno Setup制作WEB程序安装包 最近做了一个WEB程序的安装包,我把制作的过程做个介绍,贴出源码给大家做个参考 看看inno 的脚本 [Setup] AppCopyright=tes ...

  2. [Azure DevOps] 使用 Inno Setup 制作桌面软件安装包

    1. 桌面应用程序的 CI/CD 桌面应用程序的 CI/CD 过程和网站有一些不同,毕竟桌面应用程序的"部署"只是将安装包分发到目标位置,连应用商店都不用上,根据公司的管理流程可以 ...

  3. 用inno Setup做应用程序安装包的示例脚本(.iss文件)(

    用innoSetup做应用程序安装包的示例脚本(.iss文件),具体要看innoSetup附带的文档,好象是pascal语言写的脚本. 示例1(应用程序.exe,客户端安装): ;{089D6802- ...

  4. 用inno Setup制作web项目安装包

    http://www.cnblogs.com/xionghui/archive/2012/03/22/2411207.html 用inno Setup制作安装包 新建一个文件夹exambody,放ap ...

  5. setup factory 9制作VB程序安装包

    setup factory 使用起来很简单你可以如下:1.你把你刚编译出来的exe和相关的资源文件复制到某一空目录下.把exe文件添加到setup factory里之后,在列表里右键,属性里面可以设置 ...

  6. rhel7 rpmbuild 制作二进制程序安装包(.rpm) 简单示例

    下载rpm-build: # yum install rpm-build 如果上述方式无法安装(没配置网络源,虚拟机下是安装媒介源) 可以用下列方式下载后再安装(实践结果可能版本问题引起的缺少太多的* ...

  7. INNO setup 制作安装包

    1.获取SQLserver安装路径vardbpath:string;rtn:boolean;rtn := RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWA ...

  8. 20 Inno Setup制作安装包的几个问题

    系统开发好之后,通常需要制作成安装包,才能卖给用户.利用Inno Setup的向导可以制作简单的安装包,但是如果要做个好的安装包的话可能会遇到一些麻烦,今日终于抽空解决了,Inno Setup打包的一 ...

  9. 用Inno setup制作以管理员权限启动的安装包

    inno setup制作的安装包,默认是不需要管理员权限启动的.我们制作安装包,往往需要做一些设置工作,这些设置工作可能用到管理员权限.使用Resource Hacker修改inno setup资源, ...

随机推荐

  1. 使用uWSGI部署django项目

    先说说什么是uWSGI吧,他是实现了WSGI协议.uwsgi.http等协议的一个web服务器,那什么是WSGI呢? WSGI是一种Web服务器网关接口.它是一个Web服务器(如nginx)与应用服务 ...

  2. 【Alpha版本】冲刺-Day2

    队伍:606notconnected 会议时间:11月10日 会议总结 张斯巍(433) 今天安排:把昨天没完成的做好,主界面图标的修改,侧边栏背景设计 完成度:85% 明天计划:个人信息界面设计.优 ...

  3. mac OS(OS X)的OI编译环境配置指南

    编译环境:gdb+Atom 如何安装gdb: http://logic0.blog.163.com/blog/static/1889281462014183271283/   Atom下载地址: ht ...

  4. CIQRCodeGenerator Core Image Filter Reference

    https://developer.apple.com/library/prerelease/content/documentation/GraphicsImaging/Reference/CoreI ...

  5. 用css进行布局

     用css进行布局 一,开始布局的注意事项 1.作为最佳实践,应把html(内容)和css(显示)分离: 2.网站设计主要有两大类型:固定宽度(基于像素)和响应式(也称流式,使用百分数定义) 二,构建 ...

  6. 转:遗传算法解决TSP问题

    1.编码 这篇文章中遗传算法对TSP问题的解空间编码是十进制编码.如果有十个城市,编码可以如下: 0 1 2 3 4 5 6 7 8 9 这条编码代表着一条路径,先经过0,再经过1,依次下去. 2.选 ...

  7. Struts2入门-十分简单的登陆

    Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互. 开始编写St ...

  8. Oralce配置正确,报监听错误或无法识别描述中的服务

    出差客户现场,修改过网络配置,回来后本地虚拟机的Oracle数据库就不能登陆了 报监听错误,在服务器中使用Net Configration Assistant删除以前的,重新配置新的,还是不行,重启系 ...

  9. Ubuntu——"xxx is not in the sudoers file.This incident will be reported" 错误解决方法

    Ubuntu下普通用户用sudo执行命令时报如题所示错误,解决方法就是在/etc/sudoers文件里给该用户添加权限.如下: 1.切换到root用户下 2./etc/sudoers文件默认是只读的, ...

  10. JSP-Servlet的工作流程

    Servlet基础 1.Servlet概述 JSP的前身就是Servlet.Servlet就是在服务器端运行的一段小程序.一个Servlet就是一个Java类,并且可以通过“请求-响应”编程模型来访问 ...