如果都是HTTP格式的就很好办,加上NMHTTP控件,用GET或者POST来提交这个
连接,如果成功,在NMHTTP1Success的事件里就可以跟踪到,否则在NMHTTP1Failure里就可以跟踪到事件发生。

解决方案 »

  1.   

    不知道是在局域网里吗?
    FileExists("绝对路径") //比如"\\192.168.0.193\fff\fff.txt"下面是别人一个在线更新的代码,看看有没帮助呢?
    unit update_f;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, TFlatGroupBoxUnit, TFlatButtonUnit, StdCtrls,
      TFlatSpeedButtonUnit, TFlatEditUnit, TFlatMemoUnit, Psock, NMHttp,ShellAPI;type
      TSimpleVersion=record
        dwProductVersionMS: DWORD;
        dwProductVersionLS: DWORD;
      end;
      TUpdate=record      { Structure of update information }
        Name:String[63];
        Version:TSimpleVersion;
        Date:TDate;
        URL1:ShortString;
        URL2:ShortString;
        Update_Info:String;
      end;
      Tupdate_v = class(TForm)
        FlatGroupBox2: TFlatGroupBox;
        FlatGroupBox3: TFlatGroupBox;
        FlatButton1: TFlatButton;
        FlatButton2: TFlatButton;
        Label1: TLabel;
        Label2: TLabel;
        Label3: TLabel;
        Label4: TLabel;
        Label5: TLabel;
        FlatMemo2: TFlatMemo;
        FlatEdit1: TFlatEdit;
        FlatSpeedButton1: TFlatSpeedButton;
        NMHTTP1: TNMHTTP;
        Label6: TLabel;
        Label7: TLabel;
        FlatMemo1: TFlatMemo;
        Label8: TLabel;
        Label9: TLabel;
        Label10: TLabel;
        FlatSpeedButton2: TFlatSpeedButton;
        FlatEdit2: TFlatEdit;
        procedure FlatButton2Click(Sender: TObject);
        procedure NMHTTP1Connect(Sender: TObject);
        procedure NMHTTP1ConnectionFailed(Sender: TObject);
        procedure NMHTTP1Disconnect(Sender: TObject);
        procedure NMHTTP1HostResolved(Sender: TComponent);
        procedure NMHTTP1Status(Sender: TComponent; Status: String);
        procedure FlatButton1Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure FlatSpeedButton1Click(Sender: TObject);
        procedure FlatSpeedButton2Click(Sender: TObject);
      private
        { Private declarations }
        Update_New, Update_Ori: TUpdate;
        function AnalyseUpdate(Body: String; var Update: TUpdate): Boolean;
        procedure DisplaySuggestion(b: Boolean);
      public
        { Public declarations }
      end;var
      update_v: Tupdate_v;implementation
    const update_text='http://127.0.0.1/update.txt';
    {$R *.dfm}//取得当前使用版本的信息
    function GetBuildInfo(FName:string):TSimpleVersion;
    var
      VerInfoSize: DWORD;
      VerInfo: Pointer;
      VerValueSize: DWORD;
      VerValue: PVSFixedFileInfo;
      Dummy: DWORD;
    begin
      VerInfoSize := GetFileVersionInfoSize(PChar(FName), Dummy);
      GetMem(VerInfo, VerInfoSize);
      GetFileVersionInfo(PChar(ParamStr(0)), 0, VerInfoSize, VerInfo);
      VerQueryValue(VerInfo, '\', Pointer(VerValue), VerValueSize);
      with VerValue^ do
      begin
        Result.dwProductVersionMS := dwFileVersionMS;
        Result.dwProductVersionLS := dwFileVersionLS;
      end;
      FreeMem(VerInfo, VerInfoSize);
    end;function SeparateVerStr(s:String):TSimpleVersion;
    const
      Separator = '.';
    var
      p:WORD;
      v1,v2,v3,v4:WORD;
    begin
      if Length(s)=0 then Exit;  p:=pos(Separator, s);
      v1:=StrToInt(copy(s,1,p-1));
      Delete(s,1,p);
      p:=Pos(Separator,s);
      v2:=StrToInt(copy(s,1,p-1));
      Delete(s,1,p);
      p:=Pos(Separator,s);
      v3:=StrToInt(copy(s,1,p-1));
      Delete(s,1,p);
      v4:=StrToInt(s);
      Result.dwProductVersionMS:=v1*$10000+v2;
      Result.dwProductVersionLS:=v3*$10000+v4;
    end;function Tupdate_v.AnalyseUpdate(Body:String;var Update:TUpdate):Boolean;
    var
      TmpStr,Ver:String;
      function CenterStr(Src:String;Before,After:String):String;
      var
        Pos1,Pos2:WORD;
      begin
        Pos1:=Pos(Before,Src)+Length(Before);
        Pos2:=Pos(After,Src);
        Result:=Copy(Src,Pos1,Pos2-Pos1);
      end;
    begin
      TmpStr:=CenterStr(Body,Format('[%s]',[LowerCase(Update_Ori.Name)]),Format('[/%s]',[LowerCase(Update_Ori.Name)]));
      if TmpStr='' then Result:=False
      else
      begin
        Ver:=CenterStr(TmpStr,'<ver>','</ver>');
        Update.Version:=SeparateVerStr(Ver);
        Update.Date:=StrToDate(CenterStr(TmpStr,'<date>','</date>'));
        Update.URL1:=CenterStr(TmpStr,'<url1>','</url1>');
        Update.URL2:=CenterStr(TmpStr,'<url2>','</url2>');
        Update.Update_Info:=CenterStr(TmpStr,'<info>','</info>');
        Result:=True;
        FlatMemo1.Lines.Add('最新版本:'+Ver);
        FlatMemo1.Lines.Add('发布日期:'+DateToStr(Update.Date));
        FlatMemo1.Lines.Add('下载地址1:'+Update.URL1);
        FlatMemo1.Lines.Add('下载地址2:'+Update.URL2);
      end;
    end;{ Compare tow versions whether need update, True stand for need }
    function VersionCheck(OriVer,NewVer:TSimpleVersion):Boolean;
    begin
      if (OriVer.dwProductVersionMS=NewVer.dwProductVersionMS) then
        Result:=OriVer.dwProductVersionLS<NewVer.dwProductVersionLS
      else Result:=OriVer.dwProductVersionMS<NewVer.dwProductVersionMS;
    end;procedure Tupdate_v.DisplaySuggestion(b:Boolean);
    begin
      FlatMemo1.Lines.Add('');
      FlatMemo1.Lines.Add('青苔提示:');
      if b then
      begin
        if VersionCheck(Update_Ori.Version,Update_New.Version) then
          FlatMemo1.Lines.Add('找到一个更新的版本')
       else
          FlatMemo1.Lines.Add('对不起,青苔还未发布更新版本');
      end else
      begin
        FlatMemo1.Lines.Add('查找版本更新情况失败,');
        FlatMemo1.Lines.Add('请检查该版本是否正常,');
        FlatMemo1.Lines.Add('或系统是否连上了Internet。');
      end;
    end;procedure Tupdate_v.FlatButton2Click(Sender: TObject);
    begin
      Close;
    end;procedure Tupdate_v.NMHTTP1Connect(Sender: TObject);
    begin
      FlatMemo1.Lines.Add('已连接……');
    end;procedure Tupdate_v.NMHTTP1ConnectionFailed(Sender: TObject);
    begin
      FlatMemo1.Lines.Add('连接失败!');
    end;procedure Tupdate_v.NMHTTP1Disconnect(Sender: TObject);
    begin
      FlatMemo1.Lines.Add('断线中……');
    end;procedure Tupdate_v.NMHTTP1HostResolved(Sender: TComponent);
    begin
      FlatMemo1.Lines.Add('正在解析地址……');
    end;procedure Tupdate_v.NMHTTP1Status(Sender: TComponent; Status: String);
    begin
      FlatMemo1.Lines.Add(Status);
      If NMHTTP1.ReplyNumber = 404 then
        FlatMemo1.Lines.Add('更新文档没找到……');
    end;procedure Tupdate_v.FlatButton1Click(Sender: TObject);
    begin
      FlatMemo1.Clear;
      FlatMemo1.Lines.Add('系统消息:');
      FlatMemo1.Lines.Add('开始查看更新信息……');
      NMHTTP1.InputFileMode := FALSE;
      NMHTTP1.OutputFileMode := FALSE;
      NMHTTP1.ReportLevel := Status_Basic;
      try
        NMHTTP1.Get(update_text);
        FlatMemo1.Lines.Add('');
        FlatMemo1.Lines.Add('开始分析……');
        if AnalyseUpdate(NMHTTP1.Body,Update_New) then
        begin
          Label6.Caption:=Format('%d.%d.%d.%d',[
            Update_New.Version.dwProductVersionMS shr 16,
            Update_New.Version.dwProductVersionMS and $FFFF,
            Update_New.Version.dwProductVersionLS shr 16,
            Update_New.Version.dwProductVersionLS and $FFFF
            ]);
          FlatEdit1.Text:=Update_New.URL1;
          FlatEdit2.Text:=Update_New.URL2;
          Label7.Caption:=DateToStr(Update_New.Date);
          FlatMemo2.Lines.Add(Update_New.Update_Info);
          FlatMemo1.Lines.Add('已经分析成功!');
          DisplaySuggestion(True);
        end else
        begin
          FlatMemo1.Lines.Add('不能找到更新信息!');
          FlatMemo1.Lines.Add('分析失败!');
          DisplaySuggestion(False);
        end;
      except
        DisplaySuggestion(False);
        Application.MessageBox('程序更新失败!','提示',MB_OK);
      end;
    end;procedure Tupdate_v.FormCreate(Sender: TObject);
    begin
      Update_Ori.Name:='mosstools';
      Update_Ori.Version:=GetBuildInfo(ParamStr(0));
      Label8.Caption:=Format('%d.%d.%d.%d',[
        Update_Ori.Version.dwProductVersionMS shr 16,
        Update_Ori.Version.dwProductVersionMS and $FFFF,
        Update_Ori.Version.dwProductVersionLS shr 16,
        Update_Ori.Version.dwProductVersionLS and $FFFF
        ]);
    end;procedure Tupdate_v.FlatSpeedButton1Click(Sender: TObject);
    begin
      if FlatEdit1.Text<>'' then
        ShellExecute(Handle,nil,PChar(FlatEdit1.Text),nil,nil,SW_SHOWNORMAL);
    end;procedure Tupdate_v.FlatSpeedButton2Click(Sender: TObject);
    begin
      if FlatEdit2.Text<>'' then
        ShellExecute(Handle,nil,PChar(FlatEdit2.Text),nil,nil,SW_SHOWNORMAL);
    end