以下是用delphi编写的FTP自动更新程序
我想把ini文件集成到程序内部。(在线等)procedure TfrmAutoUpdate.Button5Click(Sender: TObject);
begin
  if (lbAppList.ItemIndex = -1) then
  begin
    Application.MessageBox('请选择一个产品', '系统提示');
    exit;
  end;
  frmSeting.AppName := lbAppList.Items[lbAppList.ItemIndex];
  frmSeting.ShowModal;
end;procedure TfrmAutoUpdate.FormCreate(Sender: TObject);
var
  IniFile: TIniFile;
  Sessions: TStringList;
begin
  //设置程序的外观界面
  IniFile := TIniFile.Create(ChangeFileExt(Application.ExeName, '.Ini'));
  //SkinData1.SkinFile := IniFile.ReadString('Application', 'Skins', '');
  //if (SkinData1.SkinFile <> '') then
  //  SkinData1.Active := true;
  FreeAndNil(IniFile);  TransferFactory := TTransferFactory.Create;
  PcWizard.ActivePageIndex := 0;
  Image1.Picture.Bitmap.LoadFromResourceID(HInstance, BMP_START);
  Sessions := TStringList.Create;
  Inifile := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'UpdateApps.ini');
  IniFile.ReadSections(Sessions);
  lbAppList.Items.Assign(Sessions);
  lbApplist.ItemIndex := 0;
  FreeAndNil(Sessions);
end;procedure TfrmAutoUpdate.tbsGetUpdateShow(Sender: TObject);
var
  Analyse: TAnalyse;
  //i:        Integer;
  Strs: TStrings;
begin
  tbsGetUpdate.Update;
  Application.ProcessMessages;
  ProgressBar1.Position := 0;
  self.cmdPrev.Enabled := false;
  self.cmdNext.Enabled := false;
  Analyse := TXMLAnalyse.Create;
  if lbAppList.Items.Count > 0 then
  begin
    if (Assigned(AppInfo)) then AppInfo.Free;
    AppInfo := TIniAppInfo.Create(ExtractFilePath(Application.ExeName) + 'UpdateApps.ini',
                  lbAppList.Items[lbAppList.ItemIndex]);    Label3.Caption := '从网络读取更新定义文件';
    Label3.Update;
    //for i := 0 to lbAppList.Items.Count - 1 do
    //begin
    AppInfo.AppName := lbAppList.Items[lbAppList.ItemIndex];
    Analyse.UpdateList := AppInfo.UpdateServer  + AppInfo.ListDefFile;
    Analyse.Transfer := TransferFactory.CreateTransfer(Analyse.UpdateList);
    //Analyse.Transfer.OnTransferStart := AnalyseDownloadBegin;
    //Analyse.Transfer.OnTransfer := OnAnalyseDownload;
    Analyse.OnAnalyse := OnAnalyse;
    try
      Strs := Analyse.GetUpdateList;
      //end;
      lbUpdateList.Items.Assign(Strs);
      FreeAndNil(Strs);
      if (lbUpdateList.Items.Count > 0) then
      begin
        Label3.Font.Color := clRed;
        Label3.Caption := Format('共有 %d 个可用更新', [lbUpdateList.Items.Count]);
        self.cmdPrev.Enabled := true;
        self.cmdNext.Enabled := true;
      end
      else
      begin
        Label3.Font.Color := clGreen;
        Label3.Caption := '你的软件现在是最新的版本,不需要更新';
        self.cmdPrev.Enabled := true;
        self.cmdNext.Enabled := false;
      end;
    except
      Label3.Font.Color := clRed;
      Label3.Caption := '从网络读取更新文件错误,请检查您的网络是否连通!';
      Label3.Update;
      self.cmdPrev.Enabled := true;
      self.cmdNext.Enabled := false;
    end;
  end;
  FreeAndNil(Analyse);
  //Analyse.UpdateList :=
end;procedure TfrmAutoUpdate.OnAnalyse(Sender: TObject; Count,
  Current: Integer);
begin
  ProgressBar1.Max := Count;
  ProgressBar1.Position := Current + 1;
  ProgressBar1.Update;
  Application.ProcessMessages;
end;procedure TfrmAutoUpdate.tbsWellComeShow(Sender: TObject);
begin
  if lbAppList.Items.Count > 0 then
  begin
    self.cmdPrev.Enabled := false;
    self.cmdNext.Enabled := true;
  end
  else
    self.cmdPrev.Enabled := false;
    self.cmdNext.Enabled := true;
end;procedure TfrmAutoUpdate.tbsDownloadShow(Sender: TObject);
var
  TransferObj: TTransfer;
  UpdateObj: TUpdate;
  i: Integer;
begin
  self.cmdPrev.Enabled := false;
  self.cmdNext.Enabled := false;
  pbMaster.Max := lbUpdateList.Items.Count * 3;
  pbMaster.Position := 0;
  pbDetail.Position := 0;
  memo1.Perform(EM_SCROLLCARET, 0, 0 );
  Memo1.Lines.Add('开始从指定的服务器上下载更新文件。');
  GetTempPath;
  GetLocalPath;
  for i := 0 to lbUpdateList.Items.Count - 1 do
  begin
    pbMaster.StepIt;
    UpdateObj := lbUpdateList.Items.objects[0] as TUpdate;
    UpdateObj.TempPath := strTempPath + UpdateObj.FileName;
    UpdateObj.LocalFile := strLocalpath + UpdateObj.LocalFile;
    strCurrentFile := UpdateObj.FileName;
    TransferObj := TransferFactory.CreateTransfer(AppInfo.UpdateServer + Updateobj.UpdateURL);
    TransferObj.OnTransferStart := DownloadBegin;
    TransferObj.OnTransferEnd := DownloadEnd;
    TransferObj.OnTransfer := OnDownload;
    TransferObj.OnStatus := OnStatuse;
    UpdateObj.TransferObj := TransferObj;
    UpdateObj.Download(UpdateObj.TempPath);
  end;
这个是整个程序代码。
以下是配置文件UpdateApps.ini的内容:
[FTP更新系统]
EXEFile=123.exe
UpdateServer=ftp://192.168.0.2/Upload/
UpdateFileList=UpdateList.xml
LocalPath=我想把这些参数集成到exe的主程序里面(也就是上面的代码中)

解决方案 »

  1.   

    做成资源文件用到程序里,用的时候再另存为INI文件.
      

  2.   

    弄进EXE的话,就不能修改啦~
    那就必要用Ini的
    直接写死参数OK
      

  3.   

    喔,学习了,可以把它写进EXE文件,然后释放出来就可以了,楼主的意思是不是想同时下载更新INI文件啊?如果是,更新INI文件就可以了,不需要把它集成在EXE文件里嘛。
      

  4.   

    确实没有必要
    而且如果说是自动更新程序,应该写成服务程序啊,你这样的exe程序,就是设在了开机启动里面,如果机器不登录的话,还是不能运行的