2009-06-10 19 views
4

Sie wissen wahrscheinlich, dass Windows diese Option enthält, mit der Sie die Eigenschaften einer Binärdatei anzeigen können und Informationen über den Autor, die Versionsnummer, die Firma usw. anzeigen. Wir möchten dies in unser automatisiertes Kompilierungssystem einfügen. Es wird empfohlen, diese Versionsinformationen nach dem Kompilieren der Binärdatei in die Binärdatei zu übernehmen. Es wäre jedoch hilfreich, wenn Sie wissen möchten, wie dies geschieht. Und natürlich muss dies programmatisch sein; Wir können nicht die Mühe machen, jeden Tag die Informationen manuell in einen Ressourcenhacker für 5000 Binärdateien einzugeben.Wie bette ich Versionsinformationen in eine Windows-Binärdatei ein?

Hat jemand das schon mal gemacht? Wie könnte es gemacht werden?

Antwort

10

Es sieht so aus, als ob die beste Lösung (zumindest für uns) eine RC-Datei ist.

1 VERSIONINFO 
BEGIN 
    BLOCK "StringFileInfo" 
    BEGIN 
     BLOCK "040904E4" 
     BEGIN 
      VALUE "File Version",  "1.0.4" 
      VALUE "Build Number",  "3452" 
     END 
    END 
END 

, die in eine .res kompiliert Datei

rc.exe /fo Results/version.res version.rc 

, die mit dem Rest der Objektdateien verknüpft in wird dann.

+0

Diese Lösung sollte als die richtige markiert werden –

+3

Was ist 'BLOCK '040904E4" '? Ist das eine magische Zahl? Vielleicht möchten Sie auf eine gute Ressource für RC-Dateidefinitionen verlinken !? – Kissaki

+1

Eine schnelle Google-Suche nach dieser magischen Zahl zeigt, dass es zur Angabe der Spracheinstellungen für die Strings verwendet wird: 'BLOCK" 040904E4 "// Lang = US Englisch, CharSet = Windows Multilingual Leider konnte ich nicht um andere Dokumentation darüber zu finden. – rpetti

3

Suchen Sie nach AssemblyInfo.cs für Ihr Projekt.

Aber dies muss vor der Kompilierung ausgefüllt werden. Aber Sie können eine AssemblyInfo.cs zwischen vielen Binärdateien teilen. Und Sie sind nicht an diesen genauen Dateinamen gebunden - so können Sie die Informationen in mehrere Dateien aufteilen ... eine allgemeine Datei über die Firma, eine über das Produkt, eine für die Versionsnummer der Binärdatei.

/ Individual Information 
[assembly: AssemblyTitle("")] 
[assembly: AssemblyDescription("")] 

// Version information 
[assembly: AssemblyVersion("1.0.*")] 
[assembly: AssemblyInformationalVersion("1.0.0.0")] 

// General Information 
[assembly: AssemblyConfiguration("")] 
[assembly: AssemblyCompany("")] 
[assembly: AssemblyProduct("")] 
[assembly: AssemblyCopyright("")] 
[assembly: AssemblyTrademark("")] 
[assembly: AssemblyCulture("")] 
[assembly: NeutralResourcesLanguage("en")] 
+0

Dies ist eine gute Lösung, aber die meisten unserer Binärdateien sind nicht .NET. Gibt es etwas allgemeineres? – rpetti

+0

Oh, sie sind C++. Das ist eine gute Frage, ich möchte auch die Antwort wissen. – stimms

0

Unter der Annahme, Windows PE-Binärdateien wird die Versionsinformation in den PE-Header gespeichert, in dem IMAGE_OPTIONAL_HEADER Abschnitt unter den Standorten:

WORD MajorImageVersion 
WORD MinorImageVersion 

über die this documentation sagt:

ein frei wählbares Feld. Dies ermöglicht Ihnen verschiedene Versionen einer EXE oder DLL. Sie legen diese Felder über den Linker/VERSION-Schalter fest. Zum Beispiel "LINK/VERSION:2.0 myobj.obj"

Verwandte Themen