راستش من پارسال چنین کاری رو با استفاده از یک فایل INI انجام دادم. بدین ترتیب که حدود 10 تا برنامه آموزشی داشتیم که بعضی بخشهاشون (مثل بانک تستها، ...) از روی سایت مربوطه Update میشد.
در بخشهای مختلف فایل INI نام برنامه مورد نظر، آخرین Update آن برنامه، و مسیر آخرین فایل Update بر روی سایت رو قرار میدادم. مثلا چنین چیزی:
[CD027]
Update=1382/2/5
FilePath=[DownloadsPath]/CD027/027-13820505.zip
[CD054]
Update=1382/7/25
FilePath=[DownloadsPath]/CD054/054-13820725.zip
توی برنامهام با چنین کدی چک میکردم که آیا فایل INI و Update مربوطه در محل صحیح قرار دارند یا نه:
If CheckURL('http://www.example.com/private/updates.ini') then
// do needed actions
If CheckURL('http://www.example.com/private/files/054/054-13820725.zip') then
// download and unzip update file in target directory
برای دسترسی به این فایل Update بر روی سایت نیز از Clever Internet Suite استفاده کردم.
در ضمن کل پروژه هم تو دلفی و با استفاده از WebBroker و ISAPI انجام دادم.
یک یونیت کوچولو هم که 2 تا تابع برای چک کردن وضعیت دسترسی به اینترنت توش هست هم نوشتهام که سورساش را اینجا برای شما میگذارم.
unit InetTools;
interface
uses
WinInet,
SysUtils,
Windows;
Function CheckUrl(url:string):Boolean;
Function InternetConnected: Boolean;
implementation
{==========================================&# 125;
{ Check a URL with a file or without a file}
Function CheckUrl(url:string):boolean;
var
hSession, hfile, hRequest: hInternet;
dwindex,dwcodelen :dword;
dwcode:array[1..20] of char;
res : pchar;
begin
if pos('http://',lowercase(url))=0 then
url := 'http://'+url;
Result := false;
hSession := InternetOpen('InetURL:/1.0',
INTERNET_OPEN_TYPE_PRECONFIG,nil, nil, 0);
if assigned(hsession) then
begin
hfile := InternetOpenUrl(
hsession,
pchar(url),
nil,
0,
INTERNET_FLAG_RELOAD,
0);
dwIndex := 0;
dwCodeLen := 10;
HttpQueryInfo(hfile, HTTP_QUERY_STATUS_CODE,
@dwcode, dwcodeLen, dwIndex);
res := pchar(@dwcode);
result:= (res ='200') or (res ='302');
if assigned(hfile) then
InternetCloseHandle(hfile);
InternetCloseHandle(hsession);
end;
end;
{==========================================&# 125;
function InternetConnected: Boolean;
var
flags: dword;
R:Boolean;
begin
R := InternetGetConnectedState(@flags, 0);
if Result then
if (flags and INTERNET_CONNECTION_MODEM) = INTERNET_CONNECTION_MODEM then
Result:=True
Else Result:=False;
END;
{==========================================&# 125;
end.