المزيد والمزيد من البرامج تدعم وظائف الترقية عبر الإنترنت تقدم هذه المقالة كيفية الحصول على معلومات الترقية من موقع الويب. أستخدم هنا معلومات الإصدار بشكل أساسي لاكتشاف ما إذا كنت بحاجة إلى تنزيل إصدار تمت ترقيته.
المبدأ العام هو كما يلي:
1. ضع نص المعلومات على الموقع.
2. استخدم TNMHTTP للحصول على محتوى نصي من نص معلومات موقع الويب.
3. تحليل المعلومات المطلوبة لتحليل النص.
4. قارن إصدارات البرنامج لتوفير معلومات الترقية.
أولاً، نضع نص معلومات على موقعنا. هذا النص له تنسيق ملف خاص به. قمت بتحديد التنسيق التالي:
[تحديث]
<ver>1.79.9.25</ver>
<url>http://delphibox.com/softm/3_update.zip</url>
<التاريخ>25-9-2002</التاريخ>
[/تحديث]
يمكننا حفظه كملف update.txt واستخدام المعرف []<> لتصنيف المعلومات، والتي تتضمن اسم البرنامج وإصداره وتاريخ التحديث وعنوان التنزيل. هنا أفترض أنني قمت بتحميله على http://2ccc.com/update.txt.
نستخدم بعد ذلك مكون TNMHTTP للحصول على محتويات هذا الملف من موقع الويب:
الدالة TForm1.GetUpdateText:String;
يبدأ
NMHTTP1.InputFileMode := FALSE;
NMHTTP1.OutputFileMode := FALSE;
NMHTTP1.ReportLevel := Status_Basic;
NMHTTP1.Get('http://2ccc.com/update.txt'); {احصل على نص موقع الويب}
النتيجة:=NMHTTP1.Body;
نهاية؛
بعد الحصول على النص نحتاج لفصل المعلومات، استخدمت الدالة التالية:
وظيفة TForm1.AnalyseUpdate(Body:String;var Update:TUpdate):Boolean;
فار
TmpStr,Ver:String;
وظيفة CenterStr(Src:String;Before,After:String):String;
{ تُستخدم هذه الوظيفة لفصل السلسلة في منتصف سلسلتين.
على سبيل المثال..('DelphiBox.com','Delphi','.com')=>'Box'. }
فار
Pos1، Pos2: كلمة؛
يبدأ
Pos1:=Pos(Before,Src)+Length(Before);
Pos2:=Pos(After,Src);
النتيجة:=نسخ(Src,Pos1,Pos2-Pos1);
نهاية؛
يبدأ
TmpStr:=CenterStr(Body,'update'); {احصل على معلومات الترقية بين أسماء البرامج}
إذا تمبستر = ''ثم
النتيجة:=خطأ آخر {لا يمكن العثور على معلومات ترقية الملف هذا}
يبدأ
Ver:=CenterStr(TmpStr,'<ver>','</ver>');
Update.Version:=SeparateVerStr(Ver);
Update.Date:=StrToDate(CenterStr(TmpStr,'<date>','</date>'));
Update.URL:=CenterStr(TmpStr,'<url>','</url>'); {حل عنوان الترقية}
النتيجة:=صحيح؛
نهاية؛
نهاية؛
حيث TUpdate هو تنسيق تسجيل المعلومات التي حددتها:
TSimpleVersion=سجل{معلومات الإصدار المبسط}
dwPRoductVersionMS: DWORD؛ {الإصدار الرئيسي}
dwProductVersionLS: DWORD؛ {إصدار ثانوي}
نهاية؛
TUpdate=سجل {معلومات الترقية}
الاسم: سلسلة [63]؛ {اسم البرنامج}
الإصدار:TSimpleVersion؛{الإصدار}
التاريخ: تاريخ؛ {تاريخ}
URL:ShortString؛ {عنوان التنزيل}
نهاية؛
تقوم الدالة SeparateVerStr() بتحويل معلومات الإصدار الذي تمت ترقيته في شكل سلسلة إلى تنسيق معلومات إصدار مبسط:
وظيفة SeparateVerStr(s:String):TSimpleVersion;
ثابت
فاصل='.';
فار
ص،v1،v2،v3،v4:WORD؛
يبدأ
إذا كان الطول (الأطوال) = 0 ثم خروج؛
ع:=pos(Separator, s);
v1:=StrToInt(copy(s,1,p-1));
حذف(ق،1،ص)؛
ع:=Pos(Separator,s);
v2:=StrToInt(copy(s,1,p-1));
حذف(ق،1،ص)؛
ع:=Pos(Separator,s);
v3:=StrToInt(copy(s,1,p-1));
حذف(ق،1،ص)؛
v4:=StrToInt(s);
Result.dwProductVersionMS:=v1*$10000+v2;
Result.dwProductVersionLS:=v3*$10000+v4;
نهاية؛
آخر ما عليك فعله هو مقارنة معلومات إصدار الملفات والحصول على الإصدار الخاص بك أولاً، أستخدم الوظيفة التالية:
وظيفة GetBuildInfo(FName:string):TSimpleVersion {الحصول على معلومات الإصدار الخاص}؛
فار
VerInfoSize: DWORD؛
VerInfo: المؤشر؛
VerValueSize: DWORD؛
VerValue: PVSFixedFileInfo;
دمية: DWORD؛
يبدأ
VerInfoSize := GetFileVersionInfoSize(PChar(FName), Dummy);
GetMem(VerInfo, VerInfoSize);
GetFileVersionInfo(PChar(ParamStr(0)), 0, VerInfoSize, VerInfo);
VerQueryValue(VerInfo, '/', Pointer(VerValue), VerValueSize);
مع VerValue ^ افعل
يبدأ
Result.dwProductVersionMS := dwFileVersionMS {الإصدار الرئيسي}
Result.dwProductVersionLS := dwFileVersionLS {minor version};
نهاية؛
FreeMem(VerInfo, VerInfoSize);
نهاية؛
ثم استخدم الوظيفة التالية لمقارنة الإصدار الذي تمت ترقيته من موقع الويب بالإصدار الحالي. إذا تم إرجاع TRUE، فهذا يعني أن هناك نسخة جديدة من الملف:
وظيفة VersionCheck(OriVer,NewVer:TSimpleVersion):Boolean;
يبدأ
إذا (OriVer.dwProductVersionMS=NewVer.dwProductVersionMS) ثم
يبدأ
النتيجة:=OriVer.dwProductVersionLS<NewVer.dwProductVersionLS;
نهاية آخر
يبدأ
النتيجة: =OriVer.dwProductVersionMS<NewVer.dwProductVersionMS
نهاية؛
نهاية؛