以下是用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的主程序里面(也就是上面的代码中)
我想把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的主程序里面(也就是上面的代码中)
那就必要用Ini的
直接写死参数OK
而且如果说是自动更新程序,应该写成服务程序啊,你这样的exe程序,就是设在了开机启动里面,如果机器不登录的话,还是不能运行的