论坛风格切换切换到宽版
  • 8748阅读
  • 12回复

关于inno制作安装包的问题(已解决) [复制链接]

上一主题 下一主题
离线hezi336
 

发帖
10
金钱
80
威望
8
只看楼主 倒序阅读 0 发表于: 2012-03-10
fsx涂装包安装时,需要对目录中的Aircraft.cfg文件(ini)按序列追加字符,本人写了一个,但始终写入到[fltsim.0]中,求教各位高手,那里出错了?或者有更好的办法解决?
Aircraft.cfg内容:

iss脚本内容:
  1. [code]
  2. function ValueExistsAndGetLastSectID(InifileName:string;fltsim,KeyName:string;KeyValue:String;var newID:integer):Boolean;
  3. var
  4.   i,j:integer;
  5.   _fltsim:string;
  6.   v:string;
  7. begin
  8. Result :=False;
  9. newID:=-1;
  10. keyvalue:=trim(keyvalue);
  11. for i := 0 to 100-1 do    //最大Sect循环
  12. begin
  13.     _fltsim:=fltsim+inttostr(i);
  14.   if IniKeyExists(_fltsim,KeyName,inifilename) then
  15.    if not IsIniSectionEmpty(_fltsim,inifilename) then
  16.   newID:=newID+1;
  17.     v:=GetIniString(_fltsim,KeyName,'11',inifilename);
  18.     v:=trim(v);
  19.   if CompareText(v,KeyValue)=0 then
  20.   begin
  21.     Result:=true;
  22.     exit;
  23.   end;
  24. end;
  25. end;
  26. procedure CurPageChanged ( CurPageID : Integer);
  27. var
  28.   fn:string;
  29.   id:integer;
  30.   s:string;
  31. begin
  32. if CurPageID<>wpInstalling then  
  33. exit;
  34. fn:=ExpandConstant('{app}')+'\SimObjects\Airplanes\PMDG747-400\Aircraft.cfg';
  35. if not ValueExistsAndGetLastSectID(fn,'filsim.','texture','DKH',id) then   //已存在
  36. begin
  37. s:='fltsim.'+inttostr(id+1);
  38. SetiniString(s,'title','PMDG747-400 AIR Juneyao',fn);
  39. SetiniString(s,'sim','B747-400',fn);
  40. SetiniString(s,'model','PW',fn);
  41. SetiniString(s,'panel','VC',fn);
  42. SetiniString(s,'sound','PW',fn);
  43. SetiniString(s,'texture','DKH',fn);
  44. SetiniString(s,'kb_checklists','PMDG747-400_CHECK',fn);
  45. SetiniString(s,'atc_id_color','0xffffffff',fn);
  46. SetiniString(s,'atc_id','S-1952',fn);
  47. SetiniString(s,'atc_airline','AIR Juneyao',fn);
  48. SetiniString(s,'atc_flight_number','728',fn);
  49. SetiniString(s,'ui_manufacturer','BOEING',fn);
  50. SetiniString(s,'ui_type','747-400 PW',fn);
  51. SetiniString(s,'ui_variation','AIR Juneyao',fn);
  52. SetiniString(s,'ui_typerole','747-400',fn);
  53. SetiniString(s,'ui_createdby','PMDG',fn);
  54. SetiniString(s,'description','Boeing 747-400 with PW4000 Series engines v 2.0\nPrecision Manuals Development Group\nwww.precisionmanuals.com \nFor use with BOEING 747 by PMDG \nFor Technical Support please visit www.precisionmanuals.com or email support@precisionmanuals.com \nPMDG Developer and Customer Forum available at our website. \nSounds Developed by PMDG \nFSUIPC Commercially Licensed from Pete Downson \nAll Artwork encoded using Digimark Technology \nThank you for supporting PMDG!\n',fn);
  55. SetiniString(s,'visual_damage','0',fn);
  56. SetiniString(s,'atc_heavy','1',fn);
  57. SetiniString(s,'atc_parking_types','GATE, RAMP',fn);
  58. SetiniString(s,'LongAntenna','0',fn);
  59. SetiniString(s,'LongAntenna2','1',fn);
  60. end;
  61. end;


离线gnatix

发帖
7696
金钱
-8279
威望
-828
只看该作者 1 发表于: 2012-03-11
不稍许解释一下具体要操作什么,别人很难帮助你的。
离线hezi336

发帖
10
金钱
80
威望
8
只看该作者 2 发表于: 2012-03-11
回 1楼(gnatix) 的帖子
gnatix:不稍许解释一下具体要操作什么,别人很难帮助你的。 (2012-03-11 02:04) 

需要操作的是,安装完文件后,将几行字符段,填加到Aircraft.cfg文件中,添加规则为,判断[fltsim.*]为最后一个fltsim.段位,并建立[fltsim.*+1]段位,并写入其他信息。
离线gnatix

发帖
7696
金钱
-8279
威望
-828
只看该作者 3 发表于: 2012-03-13
仔细检查一下你应该就可以发现是你自己粗心大意笔误了。

if not ValueExistsAndGetLastSectID(fn,'filsim.','texture','DKH',id) then   //已存在
应该是
if not ValueExistsAndGetLastSectID(fn,'fltsim.','texture','DKH',id) then   //已存在
离线hezi336

发帖
10
金钱
80
威望
8
只看该作者 4 发表于: 2012-03-28
回 3楼(gnatix) 的帖子
gnatix:仔细检查一下你应该就可以发现是你自己粗心大意笔误了。 if not ValueExistsAndGetLastSectID(fn,'filsim.','texture','DKH',id) then   //已存在应该是if not ValueExistsAndGetLastSectID(fn,'flts .. (2012-03-13 04:06) 

这个已经修改了,还是有点问题,虎版,能不能用别的办法,读取目标文件里的一个值,然后在这个值的基础上加1,然后写入其他信息?
离线gnatix

发帖
7696
金钱
-8279
威望
-828
只看该作者 5 发表于: 2012-03-28
还有什么问题?
你现在的代码就是你上面说的意思啊。虽然你的代码不是很严谨,但是思路就是你上面说的做法。
离线gnatix

发帖
7696
金钱
-8279
威望
-828
只看该作者 6 发表于: 2012-03-28
我是用这个代码测试的:
function ValueExistsAndGetLastSectID(InifileName: string; fltsim,KeyName: string; KeyValue:String; var newID: integer): Boolean;
var
  i: integer;
  _fltsim: string;
  v: string;
begin
Result:= False;
newID:= -1;
for i:= 0 to 100-1 do    //最大Sect循环
  begin
  _fltsim:= fltsim+inttostr(i);
  if IniKeyExists(_fltsim, KeyName, inifilename) then
    begin
    newID:= i;  //
    v:=GetIniString(_fltsim, KeyName, '11', inifilename);
    v:=trim(v);
    if CompareText(v, trim(keyvalue))=0 then
      begin
      Result:=true;
      exit;
      end;
    end;
  end;
end;
离线hezi336

发帖
10
金钱
80
威望
8
只看该作者 7 发表于: 2012-03-28
回 6楼(gnatix) 的帖子
gnatix:我是用这个代码测试的:function ValueExistsAndGetLastSectID(InifileName: string; fltsim,KeyName: string; KeyValue:String; var newID: integer): Boolean;var  i: integer;  _fltsim: string;....... (2012-03-28 14:38) 

谢谢 虎版回复,我按照您修改的代码测试,安装后发现把[fltsim.1]替换了,没有判断到最后一个[fltsim.*](最后一个应该是15)
离线gnatix

发帖
7696
金钱
-8279
威望
-828
只看该作者 8 发表于: 2012-03-28
但是你之前的意思不是要找到最后(最大)的 [fltsim.*],而是找到满足某些条件的 [fltsim.*] 并取其中最大的。

如果你只是要扫描INI文件,然后找到最大的 [fltsim.*] (不要满足某些条件),那么就需要重新写新的代码。

请把你的意思明确一下。
离线hezi336

发帖
10
金钱
80
威望
8
只看该作者 9 发表于: 2012-03-28
再次感谢虎版帮助,我明确下我的意图:就是您说的扫描INI文件,找到最大的[fltsim.*] ,然后在这个[fltsim.*] 基础上加1,就是[fltsim.*+1], 写到[fltsim.*] 的后面,这样的可以实现吗,因为[fltsim.*] 的后面还有其他的段位。

aircraft.rar (8 K) 下载次数:9