Win32 wie groß kann benutzerdefinierte Ressource sein?

9

Beim Versuch, etwas ähnliches wie SFX (selbstextrahiertes Installationsprogramm) zu erstellen, habe ich die Setup-Dateien in einer Exe mit benutzerdefinierten Ressourcen in Visual C ++ aufgenommen. Wenn die Größe der Setup-Dateien über ~ 900 MB erreicht wurde, kann der Linker keine Exe mit den eingebetteten Ressourcen generieren. Seltsame Sache ist, dass der Linker eine exe ohne irgendwelche Warnungen erzeugt. Die erzeugte EXE ist eine statisch verknüpfte MFC-App (Haupt-App des Experten). Jedoch ist nicht die Ressource enthalten. Ich habe die exe-Größe während der Verknüpfung von einer Konsole aus beobachtet. Es zeigte für eine Weile 900 MB, bevor es am Ende auf die 2MB-EXE sank. Wenn ich einige der Dateien entfernt habe (sagen wir, die Gesamtgröße beträgt 500 MB), wird die EXE-Datei mit allen eingebetteten Ressourcen in Ordnung erstellt. Gibt es eine praktische Größenbeschränkung für die benutzerdefinierte Ressource? Beachten Sie, dass die endgültige Größe der ausführbaren Datei ungefähr 1 GB beträgt. Dies ist viel weniger, als 2 GB win32-Anwendung adressieren kann. Ich frage mich, ob das ein vc ++ 2010 Bug oder Feature ist? BTW, ich habe auch /outputsize Trick verwendet. Aber es hilft nicht, außer die Verknüpfung ist viel schneller mit einer größeren erwarteten Ausgabegröße.

    
Zhichao 25.07.2012, 18:49
quelle

3 Antworten

1

Verspätete Antwort. Könnte für andere hilfreich sein. Möglicherweise keine Antwort auf Ihre Frage, aber dies kann eine Lösung für Ihr Problem sein. Suchen Sie nach "Bitrock-Installateur". Dies gibt auch Self Extract Installer. Ich habe es in vielen meiner Projekte erfolgreich zur Bereitstellung verwendet.

    
prabhakaran 17.07.2013 04:00
quelle
0

Gemäß der PECOFF-Spezifikation , der Größe der Ressourcendateneinträge ist 4 Bytes (IMAGE_RESOURCE_DATA_ENTRY.Size - siehe winnt.h)

  

Die Größe (in Byte) der Ressourcendaten, auf die das Daten-RVA-Feld zeigt.

    
mox 26.07.2012 08:47
quelle
0

Ich habe eine ähnliche Antwort hier .

Fügen Sie die binäre + magische Zahl (eindeutiges Trennzeichen) an das Ende der ausführbaren Datei an. Zur Laufzeit öffnen Sie die ausführbare Datei zum Lesen, finden Sie den Offset über eine magische Zahl oder eine andere Methode und der Rest der Datei ist Ihre großen Daten.

    
egur 28.11.2013 12:31
quelle

Tags und Links