Inno setup Inno安装编译器:如何修改文件内容

Inno setup Inno安装编译器:如何修改文件内容,inno-setup,Inno Setup,我试图逐行读取文本文件的内容 我在找东西,找一条特定的线路 我需要修改那一行 我需要将新内容保存在另一个文件中,然后删除原始文件并用原始文件名重命名新文件 函数NextButtonClick(CurPageID:Integer):布尔; 变量 ExecInfo:TShellExecuteInfo; ExecInfoBrowser:TShellExecuteInfo; textFileFrom,textFileTo:text; 行:字符串; 开始 结果:=真; 如果CurPageID=wpFini

我试图逐行读取文本文件的内容

我在找东西,找一条特定的线路

我需要修改那一行

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

函数NextButtonClick(CurPageID:Integer):布尔;
变量
ExecInfo:TShellExecuteInfo;
ExecInfoBrowser:TShellExecuteInfo;
textFileFrom,textFileTo:text;
行:字符串;
开始
结果:=真;
如果CurPageID=wpFinished,则
开始
ExecInfo.cbSize:=SizeOf(ExecInfo);
ExecInfo.fMask:=请参阅屏蔽过程;
ExecInfo.Wnd:=0;
ExecInfo.lpFile:=ExpandConstant('{app}')+'\{{Exewampmanager}';
ExecInfo.nShow:=SW_HIDE;
如果ShellExecuteEx(ExecInfo),则
开始
如果WaitForSingleObject(ExecInfo.hProcess,5000)=等待\u超时,则
开始
分配(textFileFrom,'wampmanager.conf');
重置(textFileFrom);
分配(textFileto,'wampmanager2.conf');
重写(textFileTo);
重复
readln(textFileFrom,第行);
writeln(textFileto,第行);
直到eof(textFileFrom);
关闭(textFileFrom);
关闭(textFileTo);
ExecInfoBrowser.cbSize:=SizeOf(ExecInfo);
ExecInfoBrowser.fMask:=请参阅屏蔽过程;
ExecInfoBrowser.Wnd:=0;
ExecInfoBrowser.lpFile:='http://localhost/cow';
ExecInfoBrowser.nShow:=SW_HIDE;
ShellExecuteEx(ExecInfoBrowser);
结束;
结束;
结束;
结束;
在文件中,我需要将这一行节点化:
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]
Filename: "{app}\wampmanager.conf"; Section: "main"; Key: "installDir"; String: """{app}"""
或者,您可以使用
[code]
部分的代码使事情变得复杂一些:

[设置]
AppName=我的程序
AppVersion=1.5
DefaultDirName={pf}\My程序
[守则]
函数changeSinstallDir(常量文件名,InstallDir:string):布尔值;
开始
结果:=SetIniString('main','installDir','“+installDir+'”,文件名);
结束;
过程CurStepChanged(CurStep:TSetupStep);
开始
如果CurStep=ssPostInstall,则
如果不是ChangeInstallDir(ExpandConstant(“{app}\wampmanager.conf”),
ExpandConstant({app}'))然后
MsgBox('保存到配置文件失败!',mbError,MB_OK);
结束;

例如(未测试,在web浏览器中编写)。但我不会发布答案,因为我假设您需要按特定内容搜索该行。无论如何,您确定要逐行读取配置文件吗?这似乎是通常的INI文件格式,因此我们可以建议一种更好的使用方法(键、值访问)。请不要将inno安装问题标记为“windows installer”。这两种技术是不相关的。在inno文件中,我把[INI]区域和你给我的代码放在哪里很重要吗?不,脚本部分可以放在你想要的任何地方。但不要困惑。这是两种相同的方法,或者是
[INI]
节条目,或者是该代码;-)如果我想根据向导屏幕中的输入调整INI文件,我想我应该使用“代码”选项,对吗?或者也可以使用[INI]选项来实现这一点?