软件安装的实质就是拷贝,对于简单的打包当然不需要考虑修改某(配置)文件。通过inno修改文件的目的在于把安装时相关信息写入文件中,提供其它应用的读取,而这些信息也只能在安装时才能确定,比如安装用户选择的安装目录,或者是通过自定义界面输入的端口号等信息。所以其它与安装无关的信息可以尽量不要使用inno来写入文件,这样只是在增加工作量。

  Inno修改文件内容的方式有很多。我自己总结的有以下三种方式:通过[INI]段来直接写入配置信息,调用外部程序来读写文件,使用内置读写文件函数来修改文件。

1、[INI]段方式写

  Inno本身提供了对ini文件的写入操作。在[INI]段里面加入下面的代码。

Filename: "{app}\MyProg.ini"; Section: "1"; Key: "InstallPath"; String: "{app}" ;Flags: uninsdeletesection

Filename: "{app}\MyProg.ini"; Section: "2"; Key: "InstallPath"; String: "{app}" ;Flags: uninsdeletesection

Filename: "{app}\MyProg.ini"; Section: "3"; Key: "InstallPath"; String: "{app}" ;Flags: uninsdeletesection

Filename: "{app}\MyProg.ini"; Section: "4"; Key: "InstallPath"; String: "{app}" ;Flags: uninsdeletesection

Filename: "{app}\MyProg.ini"; Section: "5"; Key: "InstallPath"; String: "{app}" ;Flags: uninsdeletesection

  Filename是你希望安装程序修改的 .INI 文件的名字。如果这个参数是空白的,它将写入到系统的 Windows 目录中的 WIN.INI 中,其中的{app}是用户在安装向导中的选择目标位置页中选定的应用程序目录。

  Section是要创建的用于放置 INI 条目的区段名。

  Key是要设置的键名。如果这个参数未指定或是空白的,将不创建键。

  Sring则是与Key对应的值,合成一个键值对。

  Flags标志了uninsdeletesection,顾名思义在卸载时将会删除这个区段。

安装完毕后生成的ini文件内容如下:

这种ini文件可以被大部分编程语言所识别,如C语言的GetPrivateProfileString、 WritePrivateProfileString就是专门读写ini格式文件的。

2、通过inno调用外部程序来读写文件

  遇到修改非ini格式文件,如xml文件,并且又不希望使用pascal语言来完成时,选择自己最得心应手的语言来完成写文件操作最佳。但是现在的问题是你所写的那个写文件的程序该怎么知道软件安装时用户的一些信息呢,比如安装所在目录,用户在界面上输入的apache端口数据。答案是通过命令行传参的方式!

  假设我用来写文件的应用程序叫wf.exe,首先需要将它和软件一起打包,之后在[run]段可以这样启动:Filename: "{app}\wf.exe"; Description:"修改文件"; Parameters:{code:getParams}; StatusMsg:"正在配置信息…"; Flags: runhidden

  上面的Parameters是给wf.exe运行指定命令行参数,{code:getParams}表示该参数是通过code段里面的叫getParams函数返回得到。而getParams函数的定义如下:

function getParams(Param: string): string;

begin

Result := '"' + ApacheEdit.Text + '" "' +  '{app}' + '"';

end;

  其中{app}作为参数之一将安装目录告诉了wf.exe,ApacheEdit.Text是获取ApacheEdit里面的文本,而ApacheEdit是一个自定义编辑框,用来接收安装时用户输入的apache端口。wf.exe得到了安装目录,也可以知道用户在界面上输入的一些信息,接下来怎么实现就看你怎么去编写wf.exe了。另外注意的是getParams返回的字符串格式,对于wf.exe需要多个参数时,返回的每个参数之间都是用双引号来隔开,不使用空格是因为很多路径存在空格的情况,这样在wf.exe里面将得到错误的参数信息。

3、通过inno提供的函数(pascal语言)来实现修改文件

  读写文件的操作最普遍的做法就是读取文件里面所有的内容,根据字符串匹配来进行合适的修改,最后再写入文件。对于pascal语言也不例外,而其中最主要的难点就是如何熟练的使用inno里面提供的字符串操作函数了。针对各种情况下的写文件操作详见以下传送:http://www.cnblogs.com/hbcppcdr/p/6236252.html

Inno Setup 如何读写文件的更多相关文章

  1. 直接用bat命令对Inno Setup的脚本文件.iss进行编译

    直接用bat命令对Inno Setup的脚本文件.iss进行编译 2010-06-17 15:17 qjn0059 | 浏览 2163 次 编程语言外语学习 分享到:   2010-06-29 11: ...

  2. Inno setup 安装*.inf文件_示例

    nno setup 调用*.Inf文件的条目区段名称_示例 首先自己编写一个INF文件来供 Inno setup 进行测试: ;复制以下代码到记事本然后另存为123.inf .然后把123.inf文件 ...

  3. 使用inno setup 制作安装文件-demo1

    ; 脚本由 Inno Setup 脚本向导 生成! ; 有关创建 Inno Setup 脚本文件的详细资料请查阅帮助文档! #define MyAppName "查体管理系统" # ...

  4. Inno Setup自定义卸载文件名称的脚本

    Inno Setup 支持在同一个目录中安装多个应用程序,所以根据安装的先后次序自动将卸载程序文件命名为 unins000.exe,unins001.exe,unins002.exe 等等.这是 IN ...

  5. Inno Setup 打包的文件以管理员权限执行

    最近发现一个问题,就是Inno Setup打包的程序安装完毕后执行需求管理员权限的程序的时候会失败( inno createprocess   须要提升),解决问题的最简单办法就是打包的后的程序也以管 ...

  6. 使用Inno Setup函数修改文件内容

    0.inno打开文件操作&字符串操作所需函数原型及解释 function LoadStringsFromFile(const FileName: String; var S: TArrayOf ...

  7. Inno Setup 安装inf文件的一个例子

    原文 http://zwkufo.blog.163.com/blog/static/2588251201063033524889/ ; INF安装例子; [Setup]; 注意: AppId 的值是唯 ...

  8. Inno setup complier将文件添加注册表

    [Registry] Root: HKCR; Subkey:.; ValueType: string; ValueName: ; ValueData:"264file" Root: ...

  9. C/S打包 客户端/windows程序 Inno Setup

    之前介绍过InstallShield打包工具,本文再介绍更加方便的打包工具Inno Setup Inno Setup相对来说,比InstallShield更容易使用,不需要去等VS去创建项目,只要提供 ...

随机推荐

  1. Entity Framework Code First数据库自动更新

    EF的Code First方式允许你先写Model,再通过Model生成数据库和表. 具体步骤如下: 1.建项目 2.在model文件夹中,添加一个派生自DbContext的类,和一些Model类. ...

  2. touchstart,touchmove判断手机中滑屏方向

    滑动屏幕    touchstart:接触屏幕时触发,touchmove:活动过程触发,touchend:离开屏幕时触发 首先获取手接触屏幕时的坐标X,Y //获取接触屏幕时的X和Y$('body') ...

  3. PoEdu - C++阶段班【Po学校】- 第3天

    引用 C中指针的功能强大,使用起来繁杂,因为指针要控制的东西太多:有指针的类型,指针的解引用,指针空间内的值,它本身是有空间的,有自己的地址等.指针也是强大的,比如:我们要在函数之内,修改方法之外的值 ...

  4. 树莓派安装Transmission-daemon出现的问题

    1,安装时发现默认的源里面没有transmission-daemon包 pi@fynn:/etc/apt/sources.list.d $ sudo apt-get install transmiss ...

  5. Servlet下载文件和http响应

    下载文件等: 1.得到公共的内容ServletContext sc = this.getServletContext(); 2.在链接名字后面加个? 一个参数?参数1=值 两个参数?参数1=值& ...

  6. Linux CPAN Perl 模块安装

    当我们想使用某些Perl模块的时候,很可能会遇到当前系统不存在这个模块的情况,这时我们可以通过使用CPAN来对相应的模块进行获取,下面就介绍一下CPAN的使用方法.首先,我们可以用perl -e 'u ...

  7. PS:缝线颜色随着鞋帮颜色的改变发生改变.files

    1.绘制逼真缝线 (1)新建两个图层,并且命名为“针眼”和“缝线”: (2)选择“铅笔”工具,像素为“2”: (3)在针孔图层上进行缝线路径描边,并双击图层,弹出“图层样式”窗口,选择“斜面与浮雕”- ...

  8. easyui tree onloadsuccess事件的心得

    在onloadSuccess事件中不能apeed新节点,否则又会触发noloadsuccess事件,形成死循环. 公司电话:028-87657875           13060063607 淘宝店 ...

  9. LinkedHahsMap和HashMap的比较

    http://www.cnblogs.com/hubingxu/archive/2012/02/21/2361281.html#commentform 一般情况下,我们用的最多的是HashMap,在M ...

  10. yii安装 /You don't have permission to access on this server

    在安装yii的时候 ,当打开了init.bat进行配置的时候小黑本弹出了个小黑框立刻就关闭了,  进入cmd模式再打开init.bat就出现了"You don't have permissi ...