2008-09-20 13 views
7

Wie gehe ich vor, um die FILEVERSION-Zeichenfolge in einer MFC-App programmgesteuert zu aktualisieren? Ich habe einen Build-Prozess, den ich verwende, um eine Header-Datei zu generieren, die die SVN-Version für eine bestimmte Version enthält. Ich verwende SvnRev von http://www.compuphase.com/svnrev.htm, um eine Header-Datei zu aktualisieren, die ich verwende, um die Titelleiste meiner MFC-App festzulegen. Jetzt möchte ich diese #define für meine FILEVERION Info verwenden.Programmgesteuertes Aktualisieren von FILEVERSION in einer MFC-App mit SVN-Revisionsnummer

Was ist der beste Weg, um fortzufahren?

Antwort

1

In Ihrer application.rc-Datei befindet sich ein Versionsblock. Dieser Block steuert die Versionsinformationen, die im Dateisystem angezeigt werden.

VS_VERSION_INFO VERSION
FILEVERSION 1,0,0,1
PRODUCT 1,0,0,1

Sie programmatisch diese Datei aktualisieren können. Stellen Sie sicher, dass Sie die Datei als Binärdatei öffnen und speichern. Wir hatten Probleme, bei denen Änderungen als Text vorgenommen wurden und die Datei beschädigt wurde.

0

Die Änderung VS_VERSION_INFO wird angezeigt, wenn Sie mit der rechten Maustaste auf die Datei im Explorer klicken und nur die Eigenschaften sehen.

Wenn Sie die aktuelle SVN-Revisionsnummer in der Titelleiste angezeigt werden sollen, würde ich vorschlagen:

  • habe ein Skript, um die Versionsnummer erhalten und erzeugt version.h Datei nur mit
#define SVN_VERSION_NO xxx 
  • Ihr Projekt umfasst diese version.h und verwendet diese Zahl in Beschriftung zu zeigen.
11

Eine .rc Datei kann #include Header-Dateien genau wie .c Dateien können. Ich habe eine automatisch generierte version.h-Datei, die Dinge wie definiert:

#define MY_PRODUCT_VERSION "0.47" 
#define MY_PRODUCT_VERSION_NUM 0,47,0,0 

Dann habe ich meine gerade haben .rc Datei #include "version.h" und diese definiert verwenden.

VS_VERSION_INFO VERSIONINFO 
FILEVERSION MY_PRODUCT_VERSION_NUM 
PRODUCTVERSION MY_PRODUCT_VERSION_NUM 
... 
VALUE "FileVersion", MY_PRODUCT_VERSION "\0" 
VALUE "ProductVersion", MY_PRODUCT_VERSION "\0" 
... 

Ich habe diese Technik mit einem MFC-Projekt nicht ausprobiert. Möglicherweise müssen Sie Ihre Ressource VS_VERSION_INFO in Ihre Datei .rc2 verschieben (die nicht von Visual Studio bearbeitet wird).

3

Haben genug Punkte noch nicht kommentieren, aber was auch immer Lösung wählen, die Sie im Auge behalten, dass FILEVERSION Felder nur eine kurze ganze Zahl unterstützen können. In unserer Situation war unsere SVN-Revision bereits darüber und führte zu einer ungültigen Revisionsnummer in unserer FILEVERSION.

+0

guter Punkt, vielleicht sollten Sie die revnum in 1000er und Einheiten teilen; oder verwenden Sie eines der anderen Felder im Versionsblock, um die revnum (als String) zu speichern. – gbjbaanb

Verwandte Themen