Entwickler-Ecke
Programmierwerkzeuge - Details der fertigen Exe ändern
IhopeonlyReader - So 20.05.12 19:29
Titel: Details der fertigen Exe ändern
Die Frage steht oben
Beschreibung: Ich möchte z.B. die Produktversion ändern
gibt es da direkt in Delphi die einstellungen zu, oder muss man das nach dem compilieren machen? wenn danach wie?
Moderiert von
Narses: Topic aus Sonstiges (Delphi) verschoben am So 20.05.2012 um 22:08
GuaAck - So 20.05.12 19:44
Unter Project/Optionen kannst Du Beschreibungen und Versonsnummern (vor dem Compilieren) eintragen. (Jedenfalls bei Delphi 7 ist es da.)
Gruß GuaAck
IhopeonlyReader - So 20.05.12 19:56
GuaAck hat folgendes geschrieben : |
Unter Project/Optionen kannst Du Beschreibungen und Versonsnummern (vor dem Compilieren) eintragen. (Jedenfalls bei Delphi 7 ist es da.)
Gruß GuaAck |
Vielen Dank :D Das war zu einfach^^... immerhin gibt es jetzt ein Thread dazu und jeder Anfänger findet es sofort :D
Lösung (Delphi 7 PE):
- Öffne das Project, dessen Details du bearbeiten möchtest
- Gehe auf Project-Optionen und dann auf Versionsinfo
hier kannst du alles ändern :)
IhopeonlyReader - So 20.05.12 20:54
kann ich in etwas wie Formcreate darauf zugreifen? oder diese Details zur Laufzeit per Button ändern?
(also gibt es sowas wie Application.ProcessManager.Info(Produktversion,Dateiversion...)?)
Mathematiker - So 20.05.12 21:36
Hallo,
IhopeonlyReader hat folgendes geschrieben : |
also gibt es sowas wie Application.ProcessManager.Info(Produktversion,Dateiversion...)? |
Nachfolgende Methode liefert (unter Delphi 5) die 4 Versionsnummern des Programms:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26:
| function Sto_GetFmtFileVersion(const FileName: String;const Fmt: String): String; var iBufferSize: DWORD; iDummy: DWORD; pBuffer: Pointer; pFileInfo: Pointer; iVer: Array[1..4] of Word; begin Result := ''; iBufferSize := GetFileVersionInfoSize(PChar(FileName), iDummy); if (iBufferSize > 0) then begin GetMem(pBuffer, iBufferSize); try GetFileVersionInfo(PChar(FileName), 0, iBufferSize, pBuffer); VerQueryValue(pBuffer, '\', pFileInfo, iDummy); iVer[1] := HiWord(PVSFixedFileInfo(pFileInfo)^.dwFileVersionMS); iVer[2] := LoWord(PVSFixedFileInfo(pFileInfo)^.dwFileVersionMS); iVer[3] := HiWord(PVSFixedFileInfo(pFileInfo)^.dwFileVersionLS); iVer[4] := LoWord(PVSFixedFileInfo(pFileInfo)^.dwFileVersionLS); finally FreeMem(pBuffer); end; Result := Format(Fmt, [iVer[1], iVer[2], iVer[3], iVer[4]]); end; end; |
Beste Grüße
Mathematiker
IhopeonlyReader - Mo 21.05.12 15:30
Ich suche nicht die Abfrage, sondern die Änderungsbefehle... Abfragen kann ich ja selbst über Details und dann ansehen, aber kann ich diese zur Laufzeit ändern?
Nersgatt - Mo 21.05.12 15:32
Dann müsstest Du ja in der Exe schreiben. Das ist ja schon aus dem Grund eine sehr schlechte Idee, weil Du dafür i.d.R. Adminrechte bräuchtest.
IhopeonlyReader - Mo 21.05.12 15:47
Nersgatt hat folgendes geschrieben : |
Dann müsstest Du ja in der Exe schreiben. Das ist ja schon aus dem Grund eine sehr schlechte Idee, weil Du dafür i.d.R. Adminrechte bräuchtest. |
Ja, ich habe nur bei meinem Project in formcreate die akutelle Version den Namen... ich finde es sehr umständlich für jede neue Version (ist inzwischen meine 30 Testversion kurz vor offenen Private-Freigabe :)) die Daten/Details zu ändern.
Ich würde dann die Details einmalig in Formcreate anpassen und diese so lassen (nur ändern, wenn die details anders sind)-> einmalig
IhopeonlyReader - Mo 21.05.12 15:54
Moderiert von
Narses: Komplett-Zitat des letzten Beitrags entfernt.
Hochzählen möchte ich nicht, da ich bei Bufixes einfach von Alpha 1.8 auf 1.8.1 übergehe und bei kompletten erweiterungern direkt von 1.8 auf 1.9 übergehe.
Somit ist das einfach hochzählen nicht so toll. Aber scheinbar muss ich jedes mal per Hand alles erneuern
jaenicke - Mo 21.05.12 18:23
Ändern musst du es ja so oder so. Ob nun in FormCreate oder in den Projekteinstellungen. Der Aufwand an die Stelle des Quelltextes zu gehen oder in die Einstellungen ist ja nicht groß unterschiedlich. ;-)
IhopeonlyReader - Mo 21.05.12 18:36
jaenicke hat folgendes geschrieben : |
Ändern musst du es ja so oder so. Ob nun in FormCreate oder in den Projekteinstellungen. Der Aufwand an die Stelle des Quelltextes zu gehen oder in die Einstellungen ist ja nicht groß unterschiedlich. ;-) |
Da ich sie aber in Formcreate jetzt schon immer ändere (für anzeigelabels...) wäre das kein zusatzaufwand
Th69 - Mo 21.05.12 18:44
Daher macht man es ja auch umgekehrt: ändere die Versionsnummer in den Projekteinstellungen und zeige diese dann in der Form an.
IhopeonlyReader - Mo 21.05.12 18:58
Th69 hat folgendes geschrieben : |
Daher macht man es ja auch umgekehrt: ändere die Versionsnummer in den Projekteinstellungen und zeige diese dann in der Form an. |
Die Versionsnunner besteht aus 4 zahlen, meine Versionsangabe aus 1 Wort und 2 bis 3 zahlen.. daher stimmt die Versionsnummer auch nicht ganz, da würde ich dann nur die 2/3 zahlen angeben.
Aber ich weiß was du meinst ;) finde ich aber genau so umständlich
Mathematiker - Mo 21.05.12 21:41
IhopeonlyReader hat folgendes geschrieben : |
Ich suche nicht die Abfrage, sondern die Änderungsbefehle... Abfragen kann ich ja selbst über Details und dann ansehen, aber kann ich diese zur Laufzeit ändern? |
In einer fertigen Exe Änderungen vornehmen?
Sehr gewagt! Da würde mein Virenprogramm aber sofort Alarm schlagen.
Beste Grüße
Mathematiker
IhopeonlyReader - Mo 21.05.12 23:22
Moderiert von
Narses: Komplett-Zitat des letzten Beitrags entfernt.
Es soll nur bearbeitet werden, wenn die Details nicht schon so sind wie sie sein sollten. Also werden sie nur beim ersten mal geändert. Das wäre dann bei mir auf dem pc. Bei dem verschicken an den enduser werden die Details mit übernommen und somit wird meine Änderung gar nicht mehr vorgenommen und somit schlägt auch kein virenprogramm alarm
IhopeonlyReader - Sa 26.05.12 23:38
Und es ist toll, dass dein Virenprogramm / Firewall da alarm schlägt Mathematiker^^ :) wäre sonst auch doof :D
Aber wäre nett, wenn du nicht nur sagst, "geht aber ist nicht so gut, denn..", sondern würde ich schon gerne wissen mit welchen Befehlen man die Details meiner eigenen Exe ändern kann
Mathematiker - So 27.05.12 08:51
Hallo IhopeonlyReader,
IhopeonlyReader hat folgendes geschrieben : |
... würde ich schon gerne wissen mit welchen Befehlen man die Details meiner eigenen Exe ändern kann |
Mit gar keinem Befehl! Ist die Exe im Rechner aktiv, kannst Du so und so nichts ändern, läuft sie nicht, brauchst Du ein externes Programm. Erst vor wenigen Tagen hast Du selbst in einem anderen Beitrag auf den Reshacker hingewiesen. Damit geht's.
Ansonsten bleibe ich dabei: Man sollte keine "fertige" Exe ändern. Die Versionsnummer in den Projekteinstellungen ändern und Neucompilieren ist besser; und man umgeht allen Stress.
Beste Grüße
Mathematiker
Nachtrag: Ich habe gerade unter
http://msdn.microsoft.com/ gesucht, ob irgendeine Möglichkeit besteht, die Versionsnummer während der Laufzeit zu ändern. Microsoft schweigt sich aus! Entweder geht es nicht oder es ist "geheim".
jaenicke - So 27.05.12 09:41
Theoretisch geht es mit UpdateResource:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms648049(v=vs.85).aspx
Das sollte auch gehen, wenn die Datei geladen ist, siehe Doku:
Zitat: |
It is recommended that the resource file is not loaded before this function is called. However, if that file is already loaded, it will not cause an error to be returned. |
Ich habe auch ein Projekt mit dem ich Daten an die eigene Exe anhängen kann. Mit dem Trick (eigene Exe umbenennen und eine Kopie an die Stelle kopieren, dann diese ändern) funktioniert es auch mit UpdateResource sicher.
http://www.delphi-forum.de/viewtopic.php?t=89659&start=0
Trotzdem: Empfehlenswert ist es in keinem Fall. Erstens braucht man im eigenen Vrzeichnis in der Regel Adminrechte und zweitens mögen das Virenscanner wie schon geschrieben auch nicht.
IhopeonlyReader - So 27.05.12 11:06
okay, also ich fassse mal zusammen:
- bei laufender Exe (eigentlich) nicht möglich
- Virenprogramme schlagen Alarm
Vörschläge:
- Programme
- Reshacker
- UpdateResource
- In Delphi direkt vor jedem Compilieren ändern
Fazit:
Ich denke ein extra Programm dafür ist nicht notwendig, da es mit Delphi selbst machbar ist.
Jedoch ist es in den Delphi Einstellungen nicht möglich unter Dateiversion Buchstaben oder weniger als 4 Zahlen anzugeben (zumindest bei Delphi 7PE).
Beispiel:
Ich möchte die Versionsnummer meiner EXE zu Alpha 1.9 ändern.
- Per Delphi: 1.9.0.0
- Reshacker: Lässt sich ebenfalls alles "gut" ändern, jedoch ist es hier ebenfalls nicht möglich in die Fileversion auf weniger als 4 Zahlen zu beschränken :(
-> Delphi oder Reshacker, beides hat den selben Effekt, jedoch ist brauch man in Delphi nichts zusätzlich installieren.
Ich werde mich wohl damit zufrieden geben müssen, dass eine Versionsnummer aus 4 Zahlen besteht... (Und keine Wörter wie Alpha reingehören.. Diese gehören zur Productversion)
...Jaenicke, was macht das UpdateResource Programm denn? Welcher Unterschied zum Reshacker liegt vor?
Ralf Jansen - So 27.05.12 14:17
Zitat: |
Ich werde mich wohl damit zufrieden geben müssen, dass eine Versionsnummer aus 4 Zahlen besteht... (Und keine Wörter wie Alpha reingehören.. Diese gehören zur Productversion) |
Gute Entscheidung. Warum sinnlos gegen das System arbeiten? Das Major.Minor.Build.Revision System ist seit Jahrzehnten bewährt an vielen Stellen tief in Windows verwurzelt und von vielen Tools verstanden. Insbesondere auch von Installern und deren Update Mechanismen.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!