tilsætning af udgave oplysninger til ansøgninger

, denne artikel, vil jeg undersøge, på hvilken måde udgave oplysninger kan stilles til rådighed i en ansøgning, at skrive en klasse, der kan inddrages i enhver ny udvikling.,,, at tilføje udgave oplysninger til ansøgninger, sidste artikel jeg drøftet tanken om et bygge - og hvorfor en standard udarbejdelsen af et sammenhængende sæt af projektresultater var en god ting, siden de tidligste edb - programmer blev indsat, udviklere ville have mulighed for at identificere, hvilken version en kunde løb. det er værd at vide om et insekt, de er rapportering er allerede fastlagt.ret hurtigt (og naturligvis en numerisk system udviklet sig, at forøgelsen af versionsnummer, hver gang en overgang var lavet.da hyppigheden af udslip steget, udviklere ville have mulighed for at skelne en ny stor udsætning sammenlignet med en foreløbig: begrebet større og mindre version af et program blev indført - lige fra v1.12 til version 2.0, meget mere (selv at fastsætte brugere) end fra v12 til v13.i mange år har de større og mindre version var tilstrækkelig og almindeligt, men som programmer blev større og kompleks, der kræver hyppigere insekt fastsætter en videregående nummer var sat til udgangen af den version, til at angive en "overgang".alle udslip med det samme antal større og mindre version har samme kendetegn liste, men bør omfatte kumulative insekt fastsætter og andre forbedringer, uden at tilføje nye elementer som sådan.endelig er det blevet god praksis at indgå bygge nummer til frigivelse, der resulterede i en komplet udgave nummer fire komponenter, x.y.z.b, hvor x er de store version, og mindre version, z - overgang og b bygge nummer.bemærker, at selv om de mindre og frigive versioner kan nulstilles (med større og mindre udslip), bygge nummer er aldrig nulstillet, og derfor altid stiger med hver ny overgang (men ikke nødvendigvis kun gradvis; det er meget muligt, at interne bygger inden for en virksomhed, der ikke er frigivet til kunder).liste 1 giver en oversigt over, hvornår hver versionsnummer komponent bør øges, når del beskriver til forøgelse af,,, x store efter betydelige ændringer for anvendelsen, y mindre efter nye funktioner er blevet tilføjet til anvendelsen, z frigivelse, hver gang et mindre udslip er tilgængelige med insekt fastsætter, b bygge hver gang fremstillingsprocessen fuldfører,,, med 1 - komponenter af versionsnummer x.y.z.b,,, selv om marketingafdelingerne kapret begrebet versionsnumrene for deres egne mål, når det blev erkendt, at et stort antal mennesker vil investere i modernisering, når de store versionsnummer er ændret eller leapfrogged konkurrencen, er det stadig meget nyttigt at have en officiel udgave nummer, -din ansøgning - det er meget nemmere at bekræfte, at din klient er ved at opbygge 134 eller senere, i stedet for "superapp 97 sr-2a plaster 13 (år 2000).det blev især vigtigt med indførelsen af fælles dll bibliotekerne inden for vinduer, der kan erstattes af et nyligt installerede anvendelse.men ikke så gode til at bruge nummereringen ordning konsekvent, næsten alle microsoft ansøgninger (exe og dll) indeholder nu en firecifret versionsnummer er indlejret i dem.ja, windows 2000 gør udstrakt brug af disse oplysninger i et forsøg på at undgå, at vigtige system filerne er erstattet af tidligere, eller nogle gange senere versioner.installation af procedurer, også gør brug af denne information vil træde i stedet for en advarsel, når en sag på samme måde, men senere version af sig selv.,,, indlejrede udgave oplysninger,,, hvis du ikke klik på et exe eller dll fil i opdagelsesrejsende pop - op - menu, som tilsyneladende har en post på bunden, kaldet "egenskaber".udvælgelsen af dette viser nogle detaljer om sagen.hvis til rådighed, den anden regning (kaldet version) viser de oplysninger, indlejret i sagen om versionsnummer, produktbetegnelse, ophavsret, oplysninger og så videre.en fil, der kan have en ressource segment kan få disse oplysninger, indbygget i det, og det omfatter også ansøgninger udarbejdes med delphi.microsoft har offentliggjort oplysninger og format, der skal gives i den ressource, afsnit om, at disse oplysninger skal angives.i delphi 2, den eneste måde, som dette kunne opnås ved at skabe en ressource fil med præcis det rigtige bånd inden for det, at det særskilt med ressourcer og at knytte den til anden anvendelse (det, der udgør en del af de vigtigste fremstillingsprocessen).men ikke vanskeligt, disse foranstaltninger et niveau af teknisk viden og færdigheder, således at få anvendelse udviklere ulejliget sig med at gøre det.det er etisk at vinduer i udvikling, mere produktiv, delphi 3 blev der indført en særlig dialog, hvor disse oplysninger kunne let blive vedlagt ansøgningen.figur 1 viser, at den dialog, der er til rådighed fra delphi - projekt menu, muligheder, punkt.,,, ved at sætte kryds i den afkrydsningsfelt, på toppen af det tekniske vurderingsorgan, for at vise, at versionsnummer oplysninger bør medtages, er det muligt at tilføje oplysninger om ikke blot den version, antal, men også flag om, hvorvidt bygge, er bestemt til offentliggørelse, og i bunden er det muligt at tilføje oplysninger til en lang liste af på forhånd definerede kategorier, som f.eks. en beskrivelse af sagen og ophavsret.delphi automatisk ændres fileversion kategori som modulet versionsnummer detaljer ovenfor, er ajourført.når denne dialog er bekræftet, delphi konstruktioner de nødvendige ressourcer - fil (der også indeholder disse oplysninger, som ansøgningen ikon) i en gennemsigtig skridt, der automatisk vil være knyttet til den endelige fuldbyrdes.hvis du gør det på selv de simpleste projekt vil man se, at de nu kan right-click eksekverbar version på og få oplysninger, ligesom alle velopdragne vinduer ansøgninger.,,, hvad version er jeg?,,,, at vi nu ved, hvordan at udgave oplysninger i anvendelse, vil det være nyttigt at få adgang til oplysningerne.hvis du forsøger at skabe over telefonen, hvilken version bruger er i gang, ville det være meget lettere at beskrive, hvordan at vise om dialog snarere end at finde anvendelse fuldbyrdes explorer, så klik, vælger egenskaber og udvælgelse af version regning.,,, som den udgave oplysninger er opbevaret som tråde i et bestemt format i ressourcen del af ansøgningen, vil det være muligt at anvende standard win32 ressource fil befaler at udvinde den relevante oplysninger, at dekode de strukturer.der er imidlertid nogle specifikke win32 api - kommandoer, der er til rådighed, at gøre dette på en meget mere praktisk form.det er getfileversioninfosize (der kommer nærmere oplysninger om rum, som opbevarer den udgave oplysninger), getfileversioninfo (som ekstrakter detaljerne i en præ - leveret buffer af den korrekte størrelse), og verqueryvalue (som ekstrakter en, der hedder stykke udgave oplysninger fra den buffer, f.eks. "legalcopyright").som sædvanlig, da vekselvirkning med win32 api, disse ordrer skal være i den rigtige rækkefølge, bevarelse af visse indre værdier tilbage fra tidligere ordrer gennem var parametre.,,, det er en god idé at indkapsle enhver form for interaktion med windows api - med en mere bruger og delphi venlige grænseflade.typisk delphi programmører ikke vil beskæftige sig med fordelingen af blokkene og win32 særlige typer, f.eks. dword og uint, og de bør heller ikke.langt bedre at udforme en god klasse, som i de bedste traditioner i oo, skjuler det rå adgang til udgave oplysninger og udgør en langt mere brugbar grænseflade.det har den fordel, at opbevaring af denne udgave oplysninger nogensinde ændre, samme klasse kan sammenfatte det system, afhængighed, samtidig med at den samme offentlige grænseflade,.,,, der er et par ting at overveje ved udarbejdelsen af denne klasse.for det første bør kunne anvendes med enhver ansøgning, herunder, hvor det er gennemført.for det andet bør give nem adgang til standard og mest anvendte udgave oplysninger nøgler (fileversion, productname osv.).endelig er det, som gør det muligt for brugeren at yde supplerende skik version nøgler og værdier i deres struktur, klasse bør trække disse på en naturlig måde.liste 2 viser de offentlige grænseflade til denne klasse.,,, tversioninfo = klasse, private, funktion getversioninfo (indeks: heltal): string;, offentlig, konstruktøren skabe (thissourcefile: string);,, destructor ødelægge; tilsidesætte; //vilkårlige centrale oplysninger, ejendom, centrale [keyname: string]: string læse getkey; //standard centrale oplysninger, ejendom companyname: string indeks 0 læse, skrive getversioninfo, setversioninfo;,, ejendom filedescription: string indeks 1 læses getversioninfo;,, ejendom fileversion: string indeks 2 læse getversioninfo;,, ejendom internalname: string indeks 3 læst getversioninfo;, ejendom ophavsret: snor, indeks 4 læst getversioninfo;,, ejendom varemærker: string indeks 5 læser getversioninfo;,, ejendom originalfilename: string indeks 6 læs getversioninfo;,, ejendom productname: string indeks 7, læse, skrive getversioninfo, setversioninfo;,, ejendom productversion: string indeks 8, læse, skrive getversioninfo, setversioninfo;,, ejendom bemærkninger: string indeks 9 læses getversioninfo;,, ejendom buildnumber: string læse getbuildnumber;,,;,,, liste 2 - grænseflade over for offentligheden tversioninfo,,,, som kan ses i klassen, alle de vigtigste navne er udsat for som standard, der hedder egenskaber, mens de vigtigste ejendomsret giver adgang til sædvane yderligere oplysninger ved navn.klassen er beregnet ved at vedtage en fuldt kvalificeret vej og file navn, fra hvilken version oplysninger bør være fjernet.der er et meget interessant aspekt ved denne klasse, der viser en underudnyttet aspekt af delphi klasse design: ved hjælp af indekset id kort til en række forskellige egenskaber, på samme accessor funktion.som det kan ses af den private anvendelse af getversioninfo plejede at læse de egenskaber, dette indeks er vedtaget i afhængigt af ejendomsret adgang til, således at den funktion at afgøre, hvilken værdi tilbage.som vi skal se i gennemførelsen, der ofte gør meget kortfattet kodning.,,, som tidligere nævnt, getfileversioninfo kommando ekstrakter nærmere oplysninger fra den ressource, afsnit og lagrer dem i bufferen vedtaget som en parameter til api - ring.derfor giver det mening at udføre dette som en ekstraordinær foranstaltning til entreprenøren.når oplysningerne er blevet ekstraheret, vi kan afhøre den kendte centrale navne.for belejligt, kodning og en stigning i resultater, vil vi få centrale værdier for alle de faste fordelingsnøgle navne og opbevare disse værdier i et system med samme ordinal værdi som hver ejendom indeks.det betyder, at gennemførelsen af de getversioninfo ejendom accessor funktion kan være gennemsigtigt, enkel og blot vender array - værdi på den medfølgende indeks.for den sædvane, nøgler, der kan afgives, vil vi simpelthen til api - ekstrakt detaljer fra den version oplysninger buffer.selv om dette vil være lidt langsommere end adgang til oplysninger direkte fra en forud beregnede system forventes det ikke, at disse egenskaber bliver ofte adgang til, og det er derfor en acceptabel udformning beslutning.liste 3 viser gennemførelsen af klassen.,,, konstruktøren tversioninfo. skabe (thissourcefile: string);,, konstant,, versionkeynames: system [0 - maxversionkeys] snor = ('companyname "," filedescription "," fileversion "," internalname,,, legalcopyright "," legaltrademarks "," originalfilename,,, productname "," productversion "," bemærkninger "), var, thisinfo: heltal,, infolength: uint;,, len: dword;,, klare: dword;,, pcharset: plongint;, begynder, har skabt,,, ////////- størrelse af version - info, len: = getfileversioninfosize (pchar (thissourcefile), klare); //fordele versioninfo buffer størrelse, setlength (versioninfo, len + 1); //- udgave - info, hvis getfileversioninfo (pchar (thissourcefile), klare, len, point (versioninfo), begynder, //få oversættelse info til sprog /charset id, hvis verqueryvalue (pointerversioninfo) '), varfileinfo. oversættelse,,, point (pcharset), infolength), begynder, langcharset: = format ("% 4%. 4,,, [loword (pcharset ^), hiword (pcharset ^)]), infoavailable: = sandt; //- standard udgave oplysninger, for thisinfo: = 0 til maxversionkeys gør, standardkeys [thisinfo]: =,, getkey (versionkeynames [thisinfo]);,,,,,,,,,,,, funktion tversioninfo.getkey (thiskeyname: string): string;,, var, infolength: uint;, begynder, hvis infoavailable så, begynder, setlength (resultat, 255), hvis VerQueryValue (Pointer(VersionInfo),,, PChar(Format('\\StringFileInfo\\%s\\%s',,, [LangCharset, ThisKeyName])), Pointer(Result),,, InfoLength) then,, begin,, SetString(Result, PChar(Result), InfoLength - 1);,, end else,, begin,, Result := '';,, end;,, end else,, begin,, Result := 'N/A';,, end;,, end;,,, function TVersionInfo.GetVersionInfo(Index: Integer): string;,, begin,, Result := StandardKeys[Index];,, end;,,, procedure TVersionInfo.SetVersionInfo(Index: Integer;,, Value: string);,, begin,, StandardKeys[Index] := Value;,, end;,,, function TVersionInfo.GetBuildNumber: string;,, begin,, //Strip the last element from the file version,, Result := FileVersion;,, while Pos ('. "resultat) > 0, begynder, resultat: = kopi (resultat, producentorganisationer (., resultat) + 1, længde (følge),,,,,,,,, en af aspekterne af den måde, hvorpå udgave oplysninger lagres i indtægter afsnit anvendelse, er, at det er muligt at definere, hvilke sprog tegnsæt, der er blevet anvendt til at fremstille den udgave oplysninger (og anvendelse eller dll selv).det er defineret i den udgave oplysninger som en dobbelt ord eller 32 - bit - tal ikke underskrevet, tal, og skal være til stede som en del af den udgave oplysninger string (hexadecimal format) for hver nøgle, der udvindes.et af de job, af producenten, samt at uddrage de udgave oplysninger i en snor buffer (en bekvem måde at oplagre statiske data tilbage fra api kræver), er at udvinde sprog og tegnsæt oplysninger og for at opbygge en korrekt hexadecimal snor, der vil blive anvendt i fremtiden kræver, at verqueryvalue.når dette er gjort, konstruktøren så ringer til rutine, der faktisk kommer en udgave oplysninger værdi for en leveret nøglen.denne rutine lever et dobbeltliv, desuden forklædt som accessor funktion for de vigtigste ejendom.igen, et interessant aspekt af denne procedure er, at den pågældende opnår en liste over de faste fordelingsnøgle navne fra en privat konstant fast - system, der er anmeldt, og som er defineret i en fælles erklæring.også dette er et lille, men meget praktisk, teknik, der også er tilladt for global variabler samt konstanter.,,, hvis du tænker tilbage til figur 1, kan du se nogle ekstra versioning oplysninger i gruppen kaldet "modul attributter", især en række flag, der beskriver status for ansøgningen om det er en ser eller privat bygge og så videre.disse oplysninger er også tilgængelige i ressourcen fil, og kan fås ved verqueryvalue api - kommando, men med en anden parameter, bare ". -" snarere end ". varfileinfo. oversættelse".i dette tilfælde, hvad der er tilbage, er et fingerpeg om en struktur, der indeholder oplysninger om fil form og indhold, dobbelt ord par, som kan kombineres for at repræsentere en streng 64 - bit versionsnummer anvendes til strengt numerisk sammenligning (installation programmer) samt modul attributter defineres i delphi.det ville være en simpel opgave at udvide tversioninfo konstruktøren at udvinde denne information og afsløre det via enkle boolean egenskaber og i delphi - 5, int64 ejendom former for streng version numre.,,, denne evne til at sammenfatte adgang til komplekse datastrukturer via en passende grænseflade er en af fordelene ved objekt orientering, og som vi vil hele tiden tilbage.den gruppe som defineret her har allerede afsløret bygge nummer som en særskilt ejendomsret, som i sig selv er afledt af den sidste del af fileversion at give brugere i klassen med relevante data på en passende måde.for eksempel, en passende anvendelse af dette, vil være på ca. boks for en ansøgning, der ikke alene anvendelse navn og ophavsret detaljer, men også programmet version og opbygge nummer for nemt.,,, til at fuldføre vores gennemgang af fremstillingsprocessen, det ville være rart, hvis, efter at have fuldført, kunne det forøgelse af bygge - nummer (og eventuelt kan frigøre nummer) i den udgave, oplysninger om alle produkter.delphi synes at opbevare denne udgave oplysninger i. af dokumentation, som ledsager projekt; det er i ini filformat og indeholder de fleste af de oplysninger, der er udsat for projektet



Previous:
Next Page: