AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Versionskommentar setzen per Code?

Ein Thema von fajac · begonnen am 14. Aug 2009 · letzter Beitrag vom 14. Aug 2009
Antwort Antwort
fajac

Registriert seit: 1. Jul 2009
60 Beiträge
 
#1

Versionskommentar setzen per Code?

  Alt 14. Aug 2009, 11:01
Liebe Gemeinde,

in den Projektoptionen / Version Info kann man in der untenstehenden Tabelle Konstanten setzen wie "CompanyName", "FileDescription" u.s.f.
Dies kann man dann in der kompilierten Datei per Explorer im Kontextmenu sehen. Jetzt die Frage: Gibt es eine Möglichkeit, diese Werte im Code, etwa über einen Compilerschalter, zu setzen? Fiktives Beispiel:

Delphi-Quellcode:
const ExternalLibVersion = '5.5.6.35';
{$IF ExternalLibVersion = '5.5.6.35'}
  // Dies geht so natürlich nicht:
  {$VERSIONINFO[Comment]='Verwendet Bibliothek 5.5.6.35 oder hoeher' }
{$IFEND}
Hintergrund: Ich habe ein Projekt, das ich für unterschiedliche Versionen einer verwendeten Bibliothek pflegen muss. Um Versionskonflikte in den produktiven Systemen zu vermeiden, ist es gewünscht, dass man die verwendete Bibliotheksversion am Kompilat erkennen kann. Bisher setze ich den Kommentar immer vor dem Erstellen per Hand, aber das ist mühsam und wird auch gern mal vergessen, daher fehlerträchtig.

Hat jemand eine Idee dazu?
Vielen Dank im Voraus!
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#2

Re: Versionskommentar setzen per Code?

  Alt 14. Aug 2009, 11:22
Du kannst diese Infos, die du in den Projektoptionen setzt, zur Laufzeit aus den Resourcen auslesen

Evtl. könntest du dir auch ein Pre-Build-Script schreiben, was den Job erledigt, aber davon hab' ich noch weniger Ahnung
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#3

Re: Versionskommentar setzen per Code?

  Alt 14. Aug 2009, 13:33
von der Resource ( {projectname}.res im Projektverzeichnis) aus, bekommst du keine Konstante und auch keinen Kompilerschalter in das Programm rein.

und via Kompilerschalter kannst du diese auch nicht setzen, da dieses ja in der .RES angebeben wird in nicht im Quelltext.


Es bestünde nur die Möglichkeit sich seine ResourceDatei (.RES) selber anzulegen und deren Inhalt via Pre-Compile-Script aus einem Resource-Script (.RC) zu erstellen ... falls Delphi es nicht via {$R project.res project.rc) selber erstellen kann.

Es gibt auch ResourceEditoren, welche die .RES direkt bearbeiten können.

Möglich wäre auch etwas über die OpenToolsAPI von Delphi.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.016 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#4

Re: Versionskommentar setzen per Code?

  Alt 14. Aug 2009, 13:40
Versionsinformationen werden in der .res Datei des Projektes gespeichert.
Du kannst diese mit dem Resource-compiler (brc32.exe) aus einer Resource Script File (.rc) selber erstellen und dann dein Projekt kompilieren.
Für den umgekehrten Weg kannst du z.B. den Resource Hacker benutzen, um dir eine .res Datei im Klartext anzuschauen und als Resource Script File zu speichern.

P.S. Ich hasse den roten Kasten
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#5

Re: Versionskommentar setzen per Code?

  Alt 14. Aug 2009, 14:07


Nja, im Prinzip ist es ja egal in welcher .RES diese Informationen drinstehn.
Man kann sie also auch in eine andere/eigene Resourcedatei (.res) verlegen, aber dann müssen die Versionsinfos in den Projektoptionen unbedingt abgeschaltet sein und lassen sich auch nicht mehr über diese anzeigen oder ändern. (sonst meckert der Linker wegen der doppelten Resourcen)


dieses ist z.B. ein Auszug der .RC von meinem Hier im Forum suchenFileSplitter:
das sind so die Basisinformationen, welches man in seine .RC/.RES direkt einbauen kann, also Programmicon, XP-Manifest und natürlich die Versionsinformationen
Code:
#define RT_MANIFEST 24

LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL

1 ICON
  BEGIN
    65536L, 538968065L, 16L, 48758784L, 1441792L, 2621440L, 2097152L, 4194304L, ...
    ..., 16711439L, 16711455L, 16711487L, 16711551L, 4294967295L, 4294967295L, 65535
  END

VS_VERSION_INFO VERSIONINFO
  FILEVERSION   2,1,0,18
  PRODUCTVERSION 1,0,0,0
  FILEFLAGSMASK 0x3fL
  FILEFLAGS     VS_FF_PRERELEASE // VS_FF_DEBUG VS_FF_PATCHED VS_FF_PRIVATEBUILD VS_FF_SPECIALBUILD
  FILEOS        VOS_NT | VOS__WINDOWS32
  FILETYPE      VFT_APP
  FILESUBTYPE   0L
  BEGIN
    BLOCK "StringFileInfo"
    BEGIN
      BLOCK "040904e4" // LANG_ENGLISH, SUBLANG_ENGLISH_US, charset:Multilingual
      BEGIN
        VALUE "CompanyName",    "FNS Enterprize's\0"
        VALUE "FileVersion",    "v2.1 (18) beta\0"
        VALUE "LegalCopyright", "© 1997–2008 by FNS*Enterprize's™ (himitsu)\0"
        VALUE "LegalTrademarks", "FNS Enterprize's™",
                                 "Delphi–PRAXiS\0"
        VALUE "Comments",       "FreeWare\0"
        VALUE "Copyright",      "© 1997–2008 by\r\nFNS*Enterprize's™",
                                 "©*2003–2008*by\r\nhimitsu*@*Delphi–PRAXiS\0"
        VALUE "Languages",      "english\0"
      END
    END
    BLOCK "VarFileInfo"
    BEGIN
      VALUE "Translation", LANG_ENGLISH | (SUBLANG_ENGLISH_US << 10), 1252L // carset:Multilingual
    END
  END

1 RT_MANIFEST
  BEGIN
    "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\" ?>\r\n",
    "\r\n",
    "<assembly xmlns=\"urn:schemas-microsoft-com:asm.v1\" manifestVersion=\"1.0\">\r\n",
    " <assemblyIdentity\r\n",
    "   type                 = \"win32\"\r\n",
    "   name                 = \"Borland.Delphi.XP-Application\"\r\n",
    "   version              = \"1.1.0.0\"\r\n",
    "   processorArchitecture = \"x86\"\r\n",
    " />\r\n",
    " <description></description>\r\n",
    " <dependency optional=\"yes\">\r\n",
    "   <dependentAssembly>\r\n",
    "     <assemblyIdentity\r\n",
    "       type                 = \"win32\"\r\n",
    "       name                 = \"Microsoft.Windows.Common-Controls\"\r\n",
    "       version              = \"6.0.0.0\"\r\n",
    "       language             = \"*\"\r\n",
    "       processorArchitecture = \"x86\"\r\n",
    "       publicKeyToken       = \"6595b64144ccf1df\"\r\n",
    "     />\r\n",
    "   </dependentAssembly>\r\n",
    " </dependency>\r\n",
    "</assembly>\r\n"
  END
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
fajac

Registriert seit: 1. Jul 2009
60 Beiträge
 
#6

Re: Versionskommentar setzen per Code?

  Alt 14. Aug 2009, 15:33
Erst einmal vielen Dank für das Feedback!

Ich habe in der Zwischenzeit ein bischen herumgespielt, u.a. mit den ToolsAPI, und folgendes herausgefunden:
1) Die Optionen werden außer in der Ressourcedate auch in der .dof-Datei des Projekts gespeichert. Löscht man die Ressource und öffnet das Projekt erneut, dann wird sie mit den Informationen in der .dof-Datei neu erzeugt.
2) Ich kann per ToolsAPI die Versions-Optionen vor dem Kompilieren setzen. Wenn ich in der entsprechenden Methode danach das Projekt speichere, ist der modifizierte Wert in der .dof-Datei gespeichert, nicht jedoch in der Ressource.
3) Selbst wenn ich in der Methode vorher die Ressourcedatei lösche (klappt), wird sie nach dem Speichern mit den alten Werten erzeugt und das Kompilat enthält logischerweise die alten Werte.

Daraus folgt: Die Ressourcendatei wird beim Laden des Projekts mitgeladen. Ist sie nicht vorhanden, wird sie erst erzeugt. Beim programmatischen Ändern der Optionen wird die geladene Ressource nicht modifiziert (Ich sehe das als einen Bug der ToolsAPI an, ärgerlich!).

Frage : Kennt jemand eine Methode, mit der man die geladene Ressource aus dem (IDE)Speicher entfernen kann? Das könnte beim Kompilieren zu euner Neuerzeugung führen, und dann hätte ich gewonnen.
Oder kennt sich jemand mit der Verwendung von IOTAProjectResource aus, so dass ich die Ressource im Speicher ändern kann?
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:15 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz