Frage

Ist es möglich, zu überprüfen, welche Version von BPL (dh Rtl70.BPL, Indy70.bpl usw.) auf einem Kunden-Computer installiert werden, wenn das Programm gestartet wird?

Ich habe einige Programme abstürzen hatte, weil die BPL dort Computer zu denen auf dem Build-Maschine unterscheidet.
Wenn ich jedes BPL auf jedem Update in das Installationsprogramm verwendet hinzuzufügen haben, ich denke, es ist einer der Punkte besiegen wird sie zur Verwendung.

Delphi 7, wenn es macht einen Unterschied


Nur ein Follow-up auf die Frage, die ich hatte.
Die rtl70.bpl Datei war nur geringfügig zwischen dem Build-Computer und den Clients.

  

Clients Computer: 7.0.4.453 760 KB (778.240 Bytes) Dienstag, 20. August 2002 16.40.26
  Bau Computer: 7.0.4.453 760 KB (778.240 Bytes) Freitag, 9. August 2002, 23.30.00

Der Updater ich sie ignoriert wurde, wobei als das gleiche zu sein (keine Änderung in Build-Nummer), aber wenn ich die Dateien manuell gelöscht und kopiert alles schien zu funktionieren.

War es hilfreich?

Lösung

Leider nicht. Wenn der Absturz auf fehlende Einfuhren aus den .bpl Dateien von Ihrer Anwendung erforderlich fällig ist, gibt es keine Möglichkeit (kurz das Delphi-RTL neu zu schreiben und Linker selbst) für diese Pakete zu überprüfen, aus dem Krachen selbst ausführbar. PatrickvL Lösung ist wahrscheinlich die beste für Ihre Situation.

Neftalí Lösung könnte eine Option sein - natürlich auf Kosten das RTLS der Verpackung, eine Menge von Dateien zu duplizieren, und einen der Punkte verlieren Pakete an erster Stelle zu haben. Wenn Sie jedoch verwenden private DLLs (dh, wenn Sie den DLLs in Ihrem privaten Binärdateien Verzeichnis kopieren), dann sollten Sie auch eine leere Datei mit dem gleichen Namen wie die ausführbaren Datei erstellen, aber die Erweiterung anhängt .local es, also für starke <> notepad.exe Sie würden eine notepad.exe.local . Siehe Raymond Chen Artikel über DLL-Umleitung für weitere Details.

Andere Tipps

Wenn Ihr Programm abstürzt, ist es wahrscheinlich, weil es die Bibliothek nicht laden kann es mit dynamisch verknüpft ist. (Wie Sie dem sagen, dies geschieht, wenn das System nicht eine Kopie der benötigten libaries überall im Suchpfad finden).

Das Problem ist, dass diese beim Start einer Anwendung geschieht, die das Windows-Betriebssystem funktioniert über eine API namens MapAndLoad (lesen Sie auch dieser ). Diese API wird aufgerufen, bevor Ihre Anwendung einmal begonnen, so dass ich keine Möglichkeit sehen, diese abzufangen.

Ein Vorschlag, den ich geben könnte, wäre ein Startprogramm zu verwenden (die statisch gelinkt werden muss, um Probleme zu vermeiden, wenn es / no / Bibliotheken überhaupt). Dieser Launcher könnte Ihre tatsächliche Anwendung überprüfen, was importiert braucht es, Ihre Umgebung überprüft und den Benutzer einen schönen Ausfall / Fehlerbehebung Vorschlags-Dialog angezeigt werden soll.

  

Ist es möglich, zu überprüfen, welche Version von BPL (dh Rtl70.BPL, Indy70.bpl usw.) installiert sind> auf einem Kunden-Computer, wenn das Programm gestartet wird?   Ich habe einige Programme abstürzen hatte, weil die BPL dort Computer zu denen,> auf dem Build-Maschine unterscheidet.   Wenn ich jedes BPL auf jedem Update in das Installationsprogramm verwendet hinzuzufügen haben, ich glaube, es zu besiegen> einer der Punkte, auf sie zu benutzen.

Sie müssen Ihre Kopie (Entwicklung) von BPL des (RTL70.bpl, INDY.BPL, ...) in das gleiche Verzeichnis installieren, das Sie die Anwendung installieren. Ihre Anwendung sucht zuerst die BPL ist in demselben Verzeichnis und nach Suche auf Verzeichnisse in dem Pfad. Der negativer Punkt ist, dass Ihr System mehr Kopien derselben BPL haben kann, der positive Punkt ist, dass Sie keine Probleme mit differents Versionen derselben Datei haben.

Viele Grüße.

P. D:. Excuse-me für mein schlechtes Englisch

Sie können das nicht von einer ausführbaren Datei, die diese bpls verwendet, aber man konnte ein kleines Startup-Programm, das die bpls prüft und ruft dann die ausführbare Haupt.

Manchmal fügt Delphi automatischer Form der Zeilen:
{$ R '* .res'}
auf die Dateien des Projekts oder Pakete.

Kommentar (//), die Linie und wieder zu kompilieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top