Ich versuche, einen weiteren Schritt im Freigabeprozess meiner Anwendung zu entfernen, indem ich automatisch Versionsinformationen aus meiner ausführbaren Datei (in diesem Fall eine .NET-Anwendung) abrufe.
Bis jetzt konnte ich mit einem begrenzten Wissen über NSIS auskommen, aber ich lerne schnell, dass dies nicht ausreicht.
Schritt 1: Versionsinformationen in der ausführbaren Datei deklarieren
In AssemblyInfo.cs deklariere ich [assembly: AssemblyVersion("1.0.0.1")]
. Dadurch wird die Versionsinformation in der kompilierten ausführbaren Datei angezeigt (unter "Dateiversion" und "Produktversion").
Schritt 2: Versionsinformationen aus der ausführbaren Datei abrufen
Nach diesem Artikel über "GetFileVersion" Wenn Sie "FileFunc.nsh" importieren, können Sie Versionsinformationen von einer ausführbaren Datei abrufen.
Verwendeter Code:
Section
Var /GLOBAL version
${GetFileVersion} "C:\test.exe" $version
...
SectionEnd
Schritt 3: Überprüfen des Inhalts des Funktionsaufrufs
Basierend auf Abschnitt 5.1.7 der Dokumentation Ich sollte in der Lage sein, während der Kompilierungszeit mit dem Befehl "!echo" in die Befehlszeile zu drucken. Der Unterschied zwischen dem Ausdruck des Inhalts einer Variablen (oder einer Konstanten usw.) verwirrt mich immer noch, daher habe ich alle vier Optionen ausprobiert:
!echo $version
!echo "$version"
!echo "${version}"
!echo ${version}
Dies führt zu:
$version (InstallScript.nsi:15)
$version (InstallScript.nsi:16)
${version} (InstallScript.nsi:17)
${version} (InstallScript.nsi:18)
Schritt 4: Deklarieren Sie die Metadaten des Installationsprogramms
Basierend auf Abschnitt 4.8.3 sollte ich in der Lage sein, die Metadaten des Installers über VIProductVersion
y VIAddVersionKey
.
VIProductVersion $version
VIAddVersionKey "FileVersion" "$version"
Im erstellten Installationsprogramm wird dadurch die Zeichenfolge "$version" in die angegebenen Felder eingefügt.
Gibt es eine ToString()
Äquivalent in NSIS? Wie kann ich auf den Inhalt einer Variablen zugreifen? Bedeutet der Ausdruck des Variablennamens, dass die Variable keinen Inhalt hat? Wie kann ich überprüfen, ob GetFileVersion
korrekt aufgerufen wird, korrekt ausgeführt wird und einen Wert zurückgibt?