局域网内程序的更新

用delphi 写的一个单位小程序(Doctor.exe),只有一个EXE文件。由于要经常去更新这个程序,所以就需要一个程序来更新。

由于这delphi 写的Doctor.exe没有Dll.    因此就用一个引导程序(MyUp.exe)来完成这个更新的任务。

111  程序实施细则:

1. 读取本地INI文件,取得版本号Ver;(GetLocalIni)

function TForm1.GetLocalIni: integer;
var
myinifile:Tinifile;
begin
myinifile:=tinifile.Create(StrExePath+'AutoUpdate.ini');
  result:=myinifile.ReadInteger('ver','newver',0);
  myinifile.Destroy ;

end;

2.读取中心数据库,取得版本号(GetCenterIni);

function TForm1.GetCenterIni: integer;
begin
   with qrytemp do
    begin
      close;
      sql.Clear ;
      sql.Add('select * from tblwqsverup where isuse=1');
      open;
      edip.Text :=fieldbyname('Centerip').AsString ;
      edname.Text := fieldbyname('Ftpuser').AsString ;
      edpass.Text := fieldbyname('FtpPass').AsString ;
      edport.Text := fieldbyname('FtpPort').AsString ;
      result:=qrytemp.fieldbyname('verID').AsInteger ;
      close;

    end;
end;

程序中下载采用FTP方式。所以把FTP的IP,user,password等相关信息一起放在机房的数据库中,也就一起读出放在窗体中的Edit中。让程序后来使用。

为了防止重复打开主程序(Doctor.exe),我采用在启动引导程序(MyUp.exe)时,先检查是否有主程序(Doctor.exe)进程存在,如果没有,才进行检查、更新和引导主程序的工作。

procedure TForm1.ExameExeRunED:boolean;
begin
strCurrentDir:=ExtractFilePath(paramstr(0))  ;
strExe:= str1+strMainExe;
  //strMainExe程序名

if not ProcedureIsExists(strMainExe) then //进程不存在则打开它
begin
   if not FileExists(strExe) then
     begin
       ShowMessage('程序文件不在当前目录,请与系统管理员联系!');
        Exit;
     end;
   if WinExec(PChar(strExe),SW_HIDE) <=31 then
     begin
       ShowMessage('程序运行错误!');
       Exit;
       end ;
end  else    ShowMessage(' is open!');

close;

//if ShellExecute(0,   nil,  PChar(strExe), nil,nil,SW_NORMAL)<=31 then
// edit1.Text :='Error' else close;
end;

function TForm1.ProcedureIsExists(AppName: string): Boolean;
var
    lppe: TProcessEntry32;
    ssHandle:THandle;
    AppFound,findqq:Boolean;
    Wnd:HWND;
begin
    Result:= False;
    ssHandle:=CreateToolHelp32SnapShot(TH32CS_SNAPALL,0);
    lppe.dwSize:=SizeOf(lppe);
    AppFound:=Process32First(sshandle,lppe);
    while AppFound   do
    begin
      //其中lppe.szExefile就是程序名**********************************************
      if UpperCase(ExtractFileName(lppe.szExeFile))=UpperCase(AppName)   then
      begin
          Result:= True;
          Exit;
      end;
      AppFound:= Process32Next(ssHandle,lppe);
    end;

end;

posted on 2011-11-13 18:24  舟山牙医  阅读(522)  评论(0编辑  收藏  举报

导航