Kann Inno Setup die Dateiversion der ausführbaren Hauptdatei lesen und den Namen des erstellten Setups auf "myapp_setup_1_0_3708_19805.exe" setzen?Kann der Setup-Dateiname von der Versionsnummer der ausführbaren Datei abgeleitet werden?
Antwort
Sie sollten es der Lage sein, diese wie:.
(Ich habe dies vor kurzem nicht versucht, aber es hat funktioniert sicherlich im Jahr 2007 zurück, als ich auf diese Weise mit InnoSetup Es könnte einige geringfügige Änderungen erforderlich, wenn Inno Syntax hat sich seitdem verändert.)
#define MainBinaryName "MyMainFile.exe"
#define SetupBaseName "setup_mytool_"
#define AppVersion GetFileVersion(AddBackslash(SourcePath) + MainBinaryName)
#define AVF1 Copy(AppVersion, 1, Pos(".", AppVersion) - 1) + "_" + Copy(AppVersion, Pos(".", AppVersion) + 1)
#define AVF2 Copy(AVF1, 1, Pos(".", AVF1 ) - 1) + "_" + Copy(AVF1 , Pos(".", AVF1 ) + 1)
#define AppVersionFile Copy(AVF2, 1, Pos(".", AVF2 ) - 1) + "_" + Copy(AVF2 , Pos(".", AVF2 ) + 1)
[Setup]
OutputBaseFilename={#SetupBaseName + AppVersionFile}
Wenn MyMainFile.exe wurde Version 1.2.3.4 dann, die das fertige Installer ersetzen nur dort setup_mytool_1_2_3_4.exe
die AVF1, AVF2 usw. Zeug das ist nennen sollte Punkte (.) in der Versionsnummer mit unter scores (_), um Probleme mit Dingen zu vermeiden, die mit vielen Punkten in einem Dateinamen nicht umgehen können.
; Get the App Version from Main Program
; This Is Full App Version Major.Minor.Build.Revision
; Store First 3 Parts of Version in ShortAppVersion to be used for SBS Assembly Installation Major.Minor.Build
#dim Version[4]
#expr ParseVersion("MainProgram.exe", Version[0], Version[1], Version[2], Version[3])
#define AppVersion Str(Version[0]) + "." + Str(Version[1]) + "." + Str(Version[2]) + "." + Str(Version[3])
#define ShortAppVersion Str(Version[0]) + "." + Str(Version[1]) + "." + Str(Version[2])
Ein viel sauberer Weg, dies zu tun, die StringChange
-Funktion beinhaltet, die mit etwas anderem zu ersetzen, die Punkte ermöglicht:
#define MainBinaryName "MyMainFile.exe"
#define SourcePath "Path/To/File"
#define SetupBaseName "setup_mytool_"
#define AppVersion GetFileVersion(AddBackslash(SourcePath) + MainBinaryName)
#define AppVersionFile StringChange(AppVersion, ".", "_")
[Setup]
OutputBaseFilename={#SetupBaseName + AppVersionFile}
Auch, wenn Sie alle vier Versionsnummern nicht zeigen wollen (zB Sie es wollen 1.0.1
sagen, statt 1.0.1.0
), können Sie die AppVersion
Zeile mit dem folgenden ersetzen:
#define NumberOfVersionPoints 3
#define AppVersion Copy(GetFileVersion(AddBackslash(SourcePath) + MainBinaryName), 0, NumberOfVersionPoints * 2 - 1)
Der Code für 'NumberOfVersionPoints' funktioniert nur, wenn die Versionsnummer keine zweistelligen Elemente enthält (z. B." 1.2.10.0 "wird falsch in" 1.2.1 "konvertiert). – TypeIA
@TypeIA Haben Sie eine Idee, wie Sie mit diesem Fall umgehen sollen? – Thunderforge
Ich tat das damals nicht, aber ich fand eine Lösung auf der Inno-Mailingliste. Ich habe gerade eine neue Antwort geschrieben. Danke, dass du mich angefangen hast! – TypeIA
GetFileVersion()
(in anderen Antworten beschrieben) gibt eine Zeichenfolge der Form "Major.Minor.Rev.Build" zurück. Wenn Sie Zugriff auf die einzelnen Elemente haben möchten, damit Sie die Zeichenfolge selbst formatieren können (wenn Sie beispielsweise nur "Major.Minor" oder "Major.Minor.Rev" möchten), können Sie den folgenden Ansatz aus der jrsoftware.innosetup mailing list:
#define VerMajor
#define VerMinor
#define VerRev
#define VerBuild
#define FullVersion=ParseVersion('PathTo.exe', VerMajor, VerMinor, VerRev, VerBuild)
#define MyAppVersion = Str(VerMajor) + "." + Str(VerMinor)
- 1. Wie kann ich die Build-Versionsnummer mit der Versionsnummer der ausführbaren Datei synchronisieren?
- 2. Speicherlayout der ausführbaren Datei
- 3. Speichern von Daten in der ausführbaren Datei
- 4. Reduzieren Größe der ausführbaren Datei von GHC
- 5. 'System.ComponentModel.PropertyChangedEventHandler' kann nicht von der speziellen Klasse 'System.MulticastDelegate' abgeleitet werden
- 6. Wo kann die Versionsnummer der Rails-App definiert werden
- 7. Windows: Befehlszeile zum Lesen der Versionsinformationen einer ausführbaren Datei?
- 8. Print rpath der ausführbaren Datei auf OSX
- 9. java.lang.UnsupportedClassVersionError: Falsche Versionsnummer in der .class-Datei?
- 10. Programmatisch das Symbol der ausführbaren Datei ändern
- 11. Ändern der Ressourceninhalte einer laufenden ausführbaren Datei
- 12. Update der WIX-Minor-Upgrade-Datei ohne Änderung der Versionsnummer?
- 13. Name der ausführbaren Anwendung unterscheidet sich von vshost ausführbaren Namen
- 14. Dynamische Symbolauflösung der ausführbaren Datei mit LLVM
- 15. Installieren Sie eine Datei unabhängig von der Versionsnummer mit WiX
- 16. Erstellungsdatum der kompilierten ausführbaren Datei (VC++ 2005)
- 17. Zählen der Anzahl der Funktionsaufrufe in einer ausführbaren Datei
- 18. Warum werden allgemeine Abschnittsvariablen nur in der Objektdatei und nicht in der ausführbaren Datei angezeigt?
- 19. Was ist der beste Weg, um den Pfad der ausführbaren Datei während der Laufzeit zu erhalten?
- 20. LaunchScreen xib und Anzeige der Versionsnummer der Anwendung von plist
- 21. .bat-Datei zum Öffnen der ausführbaren Datei in Console2
- 22. ELF - Überprüfen der ausführbaren Speicherbereiche
- 23. Derselbe Name der ausführbaren Datei, anderer Ort, setze Prioritäten
- 24. Std :: Liste der ausführbaren Funktionen?
- 25. Wie man die gtk # Abhängigkeit mit der ausführbaren Datei packt
- 26. Offene generische Argumente können nicht aus der Verwendung abgeleitet werden
- 27. Der generische Parameter T konnte nicht abgeleitet werden. Factory-Methoden
- 28. Dynamisches Patching der ausführbaren Datei auf BSD/Unix
- 29. Automatisch die Versionsnummer in der RC-Datei eines Projekts erhöhen
- 30. Abrufen des absoluten Pfads der ausführbaren Datei mit C#?
schön! funktionierte gut, brauchte nur den MainBinaryName in Anführungszeichen :) (Ich editierte deine Antwort) –
+1, ich wusste nicht, dass der Präprozessor dafür verwendet werden könnte. Wird meine Antwort entfernen. – mghie