Inno Setup Compiler:如何修改文件内容

2023-12-04

我正在尝试逐行读取文本文件的内容;

我正在寻找一些东西,针对特定的线路。

我需要修改该行;

我需要将新内容保存在另一个文件中,然后删除原始文件并用原始文件名重命名新文件;

function NextButtonClick(CurPageID: Integer): Boolean;
var
  ExecInfo: TShellExecuteInfo;
  ExecInfoBrowser: TShellExecuteInfo;
  textFileFrom, textFileTo : text;
  line: string;
begin
  Result := True;

  if CurPageID = wpFinished then
  begin
    ExecInfo.cbSize := SizeOf(ExecInfo);
    ExecInfo.fMask := SEE_MASK_NOCLOSEPROCESS;
    ExecInfo.Wnd := 0;
    ExecInfo.lpFile := ExpandConstant('{app}') + '\{#Exewampmanager}';
    ExecInfo.nShow := SW_HIDE;
    if ShellExecuteEx(ExecInfo) then
      begin
        if WaitForSingleObject(ExecInfo.hProcess, 5000) = WAIT_TIMEOUT then
          begin
            Assign(textFileFrom,'wampmanager.conf');
            Reset(textFileFrom);
            Assign(textFileto,'wampmanager2.conf');
            Rewrite(textFileTo);
            repeat
              readln(textFileFrom,line);
              writeln(textFileto,line);
            until eof(textFileFrom);
            Close(textFileFrom);
            Close(textFileTo);
               ExecInfoBrowser.cbSize := SizeOf(ExecInfo);
               ExecInfoBrowser.fMask := SEE_MASK_NOCLOSEPROCESS;
               ExecInfoBrowser.Wnd := 0;
               ExecInfoBrowser.lpFile := 'http://localhost/cow';
               ExecInfoBrowser.nShow := SW_HIDE;
               ShellExecuteEx(ExecInfoBrowser);
          end;
      end;
  end;
end;

在文件中我需要修改这一行:installDir = "c:/wamp"

因为新安装可能不在同一位置

这是conf文件:

[main]
language = english
status = "offline"
wampserverVersion = 2.2
wampserverLastKnown = 2.2
installDir = "c:/wamp"
navigator = "C:\Windows\explorer.exe"
defaultLanguage = english


[php]
phpVersion = "5.4.3"
phpLastKnown = 5.4.3
phpIniDir = .
phpConfFile = php.ini
phpExeDir = .


[phpCli]
phpCliVersion = 5.4.3
phpExeFile = php.exe
phpCliFile = php-win.exe


[apache]
apacheVersion = "2.2.22"
apacheLastKnown = 2.2.22
apacheExeDir = bin
apacheConfDir = conf
apacheExeFile = httpd.exe
apacheConfFile = httpd.conf
apacheServiceInstallParams = -n wampapache -k install
apacheServiceRemoveParams = -n wampapache -k uninstall


[mysql]
mysqlVersion = "5.5.24"
mysqlLastKnown = 5.5.24
mysqlConfDir = .
mysqlConfFile = my.ini
mysqlExeDir = bin
mysqlExeFile = mysqld.exe
mysqlServiceInstallParams = --install-manual wampmysqld
mysqlServiceRemoveParams = --remove wampmysqld


[apps]
phpmyadminVersion = 3.5.1
sqlbuddyVersion = 1.3.3
webgrindVersion = 1.0

如果该配置文件采用 INI 文件格式(看起来是这样),您可以使用[INI]修改单个值的部分,例如这样(请注意,您必须使用双引号来编译脚本并将值括在双引号中)。当然,您可以像往常一样用常量替换我在这里显示的值:

[INI]
Filename: "{app}\wampmanager.conf"; Section: "main"; Key: "installDir"; String: """{app}"""

或者你可以使用来自的代码使事情变得复杂一些[Code]部分:

[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program

[Code]
function ChangeInstallDir(const FileName, InstallDir: string): Boolean;
begin
  Result := SetIniString('main', 'installDir', '"' + InstallDir + '"', FileName);
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
  if CurStep = ssPostInstall then
    if not ChangeInstallDir(ExpandConstant('{app}\wampmanager.conf'), 
        ExpandConstant('{app}')) then
      MsgBox('Saving to config file failed!', mbError, MB_OK);
end;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Inno Setup Compiler:如何修改文件内容 的相关文章

  • Inno Setup 查找子文件夹

    是否有办法获取目录中的所有 或仅第一个 子文件夹 我正在尝试将文件安装到具有动态名称的子目录中 它不是 Inno Setup 可用的常量之一 有办法找到这个子目录名吗 那么 要获取某个文件夹中第一个找到的子文件夹的名称 无论它是哪个 您可以
  • Inno Setup - 检查目标中是否存在文件,否则不会中止安装

    我需要我的安装程序检查目标位置中是否存在文件 如果不存在 则安装将中止 我的项目是一个更新补丁 因此我希望安装程序在应用程序的主 exe 不在目标中时避免安装更新文件 我怎样才能做到这一点 有人可以给出一个通过 Windows 注册表检查文
  • 无法为 32 位 HKLM 设置注册表插入

    我想在 Inno setup 中创建一个带有子菜单项的上下文菜单 问题是 它在 64 位注册表 WoW6432Node 部分插入 HKLM 密钥 The 文档 http www jrsoftware org ishelp index php
  • 如何使用 Inno Setup 连接到 MS SQL Server?

    我想在安装过程中连接到 MS SQL Server 2008 有一个类似的问题 https stackoverflow com q 2171199 960757 它提供了一个解决方案 使用isql exe工具 与 SQL Server 20
  • 在 Inno Setup 中添加 4 个许可证页面

    我遵循了马丁的回答here https stackoverflow com questions 34592002 how to create two licensefile pages in inno setup在我的 Inno Setup
  • Innosetup - 在安装开始之前引用[Code]中的文件

    这是一种延续这个问题 https stackoverflow com questions 5658488 adding a help button to an innosetup wizard page 我想将一个文件包含在我的安装包中 C
  • 在 Inno Setup 中获取 MAC 地址

    我尝试使用下面的代码来获取 Inno Setup 中的 mac 地址 但出现错误 内部错误 ExtractTemporaryFile 找不到文件 ISID dll 我已经复制了ISID dll在应用程序文件夹中仍然出现上述错误 如果我遗漏了
  • 如何从PrepareToInstall事件函数设置StatusMsg

    我的应用程序需要安装 NET Framework 因此我运行 NET 安装准备安装事件函数 当安装运行时 我想在向导上显示一些简单的消息 I found 如何在 Inno 安装脚本的 Code 部分设置状态消息 https stackove
  • InnoSetup:不卸载更改的文件

    如何告诉 InnoSetup 不要卸载已被用户更改的 文本 文件 与 InnoSetup 安装的文件不同 或者可能更困难 在现有版本上安装新版本时 InnoSetup 应该询问用户是否覆盖更改的文件 但在纯粹卸载时 它应该在不询问的情况下卸
  • Inno Setup:如何根据代码更改语言文件

    我使用自己的语言文件 isl 而不是使用 Inno Setup 的默认语言文件 它允许我自定义一些消息 但现在 我想要每种语言文件有两个版本 一个用于首次安装 一个用于更新 但是 是否可以从代码中选择一个文件 如果是 该怎么做 也许有一些比
  • Inno Setup 提示用户输入文件夹并存储值

    我有以下需求 Run run robocopy exe source dest OLD source contents options Where source必须由目标计算机上的用户指定 这可以根据物理平台进行更改 目的地将与用户定义的源
  • Inno-Setup:在消息框中使用自己的按钮文本

    良好的 GUI 设计中的常见做法是不使用是 否消息框 而是为按钮提供真实名称 例如保存或丢弃 我们如何在显示的消息框中实现这一点MsgBox在 InnoSetup 中 至少对于我们在代码部分中显示的那些 The MsgBox http ww
  • Inno Setup:仅在不是 VERYSILENT 的情况下安装

    仅当安装程序未以非常安静的方式运行时 我才想安装并注册某个文件 我不知道我怎样才能做到这一点 我当前的线路是 Source M sqlite36 engine dll DestDir sys Flags uninsneveruninstal
  • 使用 Inno Setup 更快地创建安装程序

    当我在大量文件 gt 2GB 上运行 Inno Setup 时 需要很长时间才能运行 我相信它把时间花在了压缩上 这应该是 CPU 限制的 但它只使用了几个 CPU 有没有办法将其分散到 许多 更多核心 具体来说 我正在处理这个提升发布存储
  • Inno Setup 从 .NET Framework 4.5(或更高版本)安装程序获取进度以更新进度栏位置

    我目前正在安装 NET Framework 4 6 2 作为先决条件PrepareToInstall事件函数 以便我可以获得退出代码 设置NeedsReboot状态 或者如果安装失败则中止 我的代码如下 一切正常 var PrepareTo
  • 在 Inno Setup 中编译安装程序时跳过不存在的源文件

    In the Files 部分 我必须通过尝试编译一个不存在的文件来实现这一点 编译器不会失败并遵循其过程 例如在这段代码中 Files Source D pais modulo IMG image png DestDir userdocs
  • 使用 Inno Setup 中格式化(部分粗体)的文本制作安装程序?

    有人看过 GOG com 游戏安装程序吗 如何制作像这样的欢迎文本字符串 包括单个标题中的路径和需要大小 其中部分内容加粗 以下是修改安装路径后如何更改字符串换行的示例 您可以使用TRichEditViewer http www jrsof
  • 如何在 Inno Setup 中静默安装 Microsoft VC++ 可再发行组件?

    如何在 Inno Setup 中静默安装 Microsoft VC 可再发行组件 我使用了以下代码 除了安装进度窗口之外 大部分安装部分都是静默的 这是我的 Run 部分代码 Run Filename app bin vcredist x8
  • 如何在“PrepareToInstall”期间显示进度?

    我正在开发的安装程序的大部分工作是在PrepareToInstall功能 因为我需要做的一切都可能失败 因此这是处理这些事情的适当位置 以防它们失败 通过在函数结果中传递错误消息 可以自动报告任何失败 安装程序实际复制的只有 3 个小文件
  • 避免 Inno Setup 中的“无法展开 shell 文件夹常量 userdocs”错误

    我将一些示例文档安装到 Windows 上标准 我的文档 文件夹的 PerfectTablePlan 子文件夹中 这对于 99 以上的用户来说效果很好 但是 如果用户没有 我的文档 文件夹 我会收到许多以下形式的丑陋错误消息 内部错误 无法

随机推荐

  • Android使用ArrayList向多个联系人发送短信

    我正在编写一个向多个联系人发送短信的应用程序 联系人号码存储在ArrayList 从另一项活动收到 我无法使用这个ArrayList将多个联系人传递到内置 SMS Android 应用程序 这是代码 ArrayList
  • 如何在不触发文本观察器的情况下更改 EditText 文本?

    我有一个EditText其上带有客户文本观察器的字段 在一段代码中 我需要更改我使用的 EditText 中的值 setText whatever 问题是一旦我做出改变afterTextChanged方法被调用 这创建了一个无限循环 如何更
  • PHP 会话在页面之间丢失数据

    我正在尝试为我的网站设置一个登录系统 需要有人登录才能发帖 我已经用会话设置了它 它在我的本地主机上运行得很好 但在服务器上却不起作用 我在某些页面上设置了 print r session 以查看数据丢失的位置 在 checklogin p
  • Haskell Servant 从处理程序获取当前路由/URL

    我想获取与我的处理程序相对应的当前路线 这是我的服务器的模型 仅供参考 type ServerAPI route01 gt Get HTML Text lt gt route02 gt subroute gt Get HTML Text l
  • 以角度形式保留 http 调用的顺序

    我正在尝试使用我在此处找到的几种方法来解决我面临的订单问题SO没有成功 我有一个方法 我正在为数组加载一些数据leaflet layers private loadSelectedTileLayersCapabilities void le
  • 在示例 Android 应用程序中使用解析 SDK 库时出现错误

    在这里 我正在使用名为 3rd party sdk 的东西做一些事情parse sdk它为Android平台提供了一些API 我经历过这个link并尝试为此解析 sdk 做一些示例工作 但是在完成该链接上提到的所有步骤之后 我无法运行此测试
  • 克隆对象不可删除

    我正在尝试使用 Jquery 克隆可删除对象 但克隆的对象不可删除 document ready function input value Add click function e e preventDefault div field la
  • 按顺序在数组中查找数组

    如何编码 find array in array 功能 伪代码 Haystack array 0 a 1 b 2 a 3 b 4 c 5 c 6 a 7 b 8 d 9 c 10 a 11 b 12 a 13 b 14 c Needle a
  • SCOPE_IDENTITY 似乎不适用于参数化查询

    我有一个带有标识列的表 我想在插入后获取其值 以下代码不使用参数 运行良好 string query INSERT INTO aTable aColumn VALUES 42 SqlCommand command new SqlComman
  • 使用 WordPress 配置 apple-app-site-association 文件

    我正在尝试实现 iOS 通用链接 我需要在 WordPress 的根目录中提供一个 apple app association 文件 我如何为我的 apple app association 文件提供服务Content type appli
  • 使用文本 IO 双击可执行文件制作 ruby​​ 脚本?

    我是 Ruby 的初学者 我不知道该怎么做 现在我有了脚本 它在终端中完美运行 但我希望能够在桌面上创建它的双击版本 然后在终端中打开一个窗口并运行脚本 Automator 和 Platypus 不起作用 我不知道该怎么办 先感谢您 假设您
  • Nivo滑块自定义高度/宽度问题

    我已经寻找解决我的问题的方法 但尚未成功 我有不同尺寸的图像Nivo Slider 但我需要创建一个viewport显示图像居中div 这很难解释 但我在下面附上了一张图表 图像必须居中div 而div也必须反应灵敏 我不想要div更改其大
  • 如何限制循环,使其仅对每个值循环一次

    使用以下方法获得两个数组 array1 ls lad awk print 5 array2 ls lad awk print 9 两个数组排版 declare a array1 0 4096 1 4096 2 4096 3 4096 4 4
  • 将 NSData 转换为 NSString - NSLog 限制

    我正在尝试转换NSData to NSString在 Zendesk 中 但得到的字符串不完整 或者至少无法完全解码data When I curl以下命令 curl https mySubdomain zendesk com api v2
  • Amazon EC2 virtualenv:pip 说它安装了 numpy 但 python 找不到它

    我已经非常彻底地研究了这个问题 但似乎找不到答案 我正在运行 virtualenv 并尝试使用 Python 2 7 在 EC2 上安装 numpy 是的 我已经激活了 virtualenv dev ec2 user site pip no
  • 在引用的 dll 中放置 AutoMapper 地图注册的位置

    这是我的第一个 AutoMapper 项目 对某些人来说可能是显而易见的 但教程和示例并不适合我 我试图了解在哪里以及在某种程度上如何注册 我想我想要配置文件 我的地图以供使用 有很多 MVC 示例都说要使用全局 asax 这是有道理的 但
  • 获取 ng-Show 显示的列表的长度

    我正在使用Vraptor Angular 问题很简单 我用 ng show 隐藏了表中的一些行 但我想获取显示的实际行的数量 长度 示例 我在 data 上有 10 条记录 但是当我使用 ng show 时 它只显示 5 条记录 当我使用
  • Microsoft.CppClean.targets 删除我需要的文件

    我有一个VS2012的解决方案 其中项目A在运行时生成一个 h文件 该头文件被另一个项目B使用 项目A和项目B位于同一目录中 但是 当项目 B 开始重建时 C Program Files x86 MSBuild Microsoft Cpp
  • javax.el.PropertyNotWritableException:/index.xhtml @29,118 value =“”:设置操作的语法非法

    我想创建一个带有本地化选项的登录屏幕来翻译名称 当我从默认英语更改为阿拉伯语时 它崩溃了 这是faces config xml
  • Inno Setup Compiler:如何修改文件内容

    我正在尝试逐行读取文本文件的内容 我正在寻找一些东西 针对特定的线路 我需要修改该行 我需要将新内容保存在另一个文件中 然后删除原始文件并用原始文件名重命名新文件 function NextButtonClick CurPageID Int