Seite 1 von 3

Kompiliertes Binary unter Windows = Archiv?

Verfasst: 28.06.2016 02:32
von DarkSoul
Hallo Forum,

mir ist gerade etwas seltsames aufgefallen:

Windows glaubt, dass eine meiner mit PB 5.42 kompilierten Exe-Binaries ein Archiv sei.

1. Wenn ich sie rechtsklicke, wird mir die Möglichkeit angeboten, das vermeintliche Archiv zu entpacken (was natürlich fehlschlägt, denn es ist ja keines)
2. Wenn ich Rechtsklick->Eigenschaften gehe, habe ich dort einen Tab "Archiv" und sehe ein Fenster mit genullten Archiv-Statistiken (versagt ja ebenfalls, da noch immer kein Archiv)

... :freak: ...

Ist dad nen Windows-Bug oder liegt das tatsächlich an meinem Programm? Ich finde das unschön. Jemand eine Idee?

Das ist nur bei der einen. Es handelt sich um ein Spiel, welches DirectX im Vollbild verwendet.

Ich kann den Source nicht hergeben, aber einige Anhaltspunkte beschreiben, die ich als mögliche Fehlerquellen sehe:

Genau dieses Programm nutzt allerdings auch die Packer-Library, die mit PB mitgeliefert wird. Liegt es daran? Die Archive, die darin verarbeitet werden, sind nicht im Binary selbst enthalten, sondern liegen extern.

Die Dateien, die das Programm hier verarbeitet, sind nichts weiter als ZIP- oder LZMA-Archive, die PNG- und ADPCM-Daten enthalten. Es werden derzeit beide Kompressionsformate akzeptiert. Die enthaltenen Daten werden bei Bedarf entnommen und an die jeweiligen PB-eigenen Libraries verfüttert, damit das Spiel Bild und Ton hat. Ich habe das so gemacht, damit nicht gefühlte 100000 lose Einzeldateien von meistens <1kb in irgendwelchen Unterordnern herumflattern.

Später kommt ZIP raus. Das ist nur zum Debuggen, weil das unter Windows einfacher ist, als LZMA. Andererseits schafft LZMA, die ADPCM-Daten auf nochmal ungefähr die Hälfte zusammenzuschieben, was für bereits komprimierte Tondaten bemerkenswert ist. LZMA kommt dann ins Endprodukt.

Hier gibt es keinerlei Probleme. Das Spiel funktioniert einwandfrei.

Nur eben, es wird selbst als Archivdatei fehlinterpretiert. :freak:

Dies ist die einzige Binary, die ich bisher mit PB 5.42 kompiliert habe, weil ich erst gestern ein Update eingespielt habe. Ich weiß nicht, ob das vorher schon so war.

Noch eine Anmerkung (Bitte nicht lachen!):

Das Spiel ist uralt und stammt aus PB 3.x-Zeiten und war für Win98. Ich möchte es nur ein wenig modernisieren, weil ich dran hänge und es auf heutigen Windows-Versionen Probleme bereitet (es schaltet die Grafikauflösung von Windows-Desktop in den Farben herunter und die Grafik stimmt außerhalb vom Spiel nicht mehr. Die Taskbar ist Lila statt Grau und alles ist irgendwie bunt und in falschen Farben... Außerdem funktionierte der Ton seit ewigen Zeiten nicht mehr). Muss ein alter PB-Bug sein, denn mit dem heutigen PB macht er diesen Blödsinn mit den Farben nicht mehr. Vielleicht waren die Compiler-Settings damals noch anders?

Die alten Archive konnte das heutige PB ebenfalls nicht mehr richtig verarbeiten. Früher muss PB ein anderes Archivformat verwendet haben als heute. Hier waren daher Modernisierungen nötig. Dabei werden die alten Archive durch LZMA-Archive ersetzt.

Habe übrigens Win 8.1 64 Bit

Re: Kompiliertes Binary unter Windows = Archiv?

Verfasst: 28.06.2016 09:40
von udg
Hi,
und wenn du statt dem Code mal die exe anhängst?
Könnte dann schauen wie sie hier interpretiert wird
Grüße

Re: Kompiliertes Binary unter Windows = Archiv?

Verfasst: 28.06.2016 10:12
von RSBasic
DarkSoul hat geschrieben:Hallo Forum,
Hallo registrierter Benutzer :D
DarkSoul hat geschrieben:1. Wenn ich sie rechtsklicke, wird mir die Möglichkeit angeboten, das vermeintliche Archiv zu entpacken (was natürlich fehlschlägt, denn es ist ja keines)
Das hatte ich noch nie. Kannst du davon einen Screenshot machen?
Normalerweise wird das Kontextmenüs mit Hilfe des Dateityps erstellt. Wenn es eine EXE-Datei ist, sollte auch nur das EXE-Kontextmenü erscheinen und nicht das ZIP-Kontextmenü.
DarkSoul hat geschrieben:2. Wenn ich Rechtsklick->Eigenschaften gehe, habe ich dort einen Tab "Archiv" und sehe ein Fenster mit genullten Archiv-Statistiken (versagt ja ebenfalls, da noch immer kein Archiv)
Ja, das kenne ich und wird standardmäßig angezeigt, wenn es beispielsweise ein SFX ist.

Es könnte sein, dass irgendein Code-Teil fehlinterpretiert wird. Da ich deinen Quellcode nicht kenne und auch nicht alles weiß, was sich in deiner Projektdatei befindet, kann ich leider nicht direkt sagen, woran es liegt.
Was du machen kannst, um herauszufinden, woran es liegt:
1. Erstelle eine Kopie deines gesammten Projektes.
2. Entferne einige Code-Teile und kompiliere es erneut. Diesen Vorgang wiederholen.
3. Früher oder später ist die Archiv-Eigenschaft verschwunden und dann kannst du feststellen, welcher Code dafür zuständig ist.

Re: Kompiliertes Binary unter Windows = Archiv?

Verfasst: 28.06.2016 13:51
von DarkSoul
@RSBasic:

Ich habe den schuldigen Code ausfindig machen können. Das kleine Häppchen ist kein Geheimnis und ich kann es herzeigen:
UseLZMAPacker()
DataSection
IMA_STEP_TABLE:
Data.w 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 19, 21, 23, 25, 28, 31, 34, 37, 41, 45, 50, 55, 60, 66, 73, 80, 88, 97, 107, 118, 130, 143, 157, 173, 190, 209, 230, 253, 279, 307, 337, 371, 408, 449, 494, 544, 598, 658, 724, 796, 876, 963, 1060, 1166, 1282, 1411, 1552, 1707, 1878, 2066, 2272, 2499, 2749, 3024, 3327, 3660, 4026, 4428, 4871, 5358, 5894, 6484, 7132, 7845, 8630, 9493, 10442, 11487, 12635, 13899, 15289, 16818, 18500, 20350, 22385, 24623, 27086, 29794, 32767
IMA_INDEX_TABLE:
Data.b -1, -1, -1, -1, 2, 4, 6, 8, -1, -1, -1, -1, 2, 4, 6, 8
EndDataSection
Sowie ich es weiter einkürze, verschwindet der Archiv-Tab.

Im Originalprojekt befinden sich der Data-Block in einem Include.

Ich behaupte mal, es ist ein PB-Bug, der mit den neueren Versionen hineingekommen ist, da es bei PB 5.3 x86 nicht passiert, aber bei PB 5.42 LTD x86.
Es kann auch ein Windows-Bug sein, dass das "Innenleben" der Binary ungünstig fällt. Denn wenn man die Data-Zeilen ändert, verschwindet der Archiv-Tab auch manchmal.

Jetzt seid ihr dran. Macht was draus :lol: .

Leider kann ich in diesem Forum die Dateiupload-Funktion nicht finden. Sonst würde ich eine .EXE und Screenshots liefern. Daher müsst ihr sie selber kompilieren. Einfach den Codeschnipsel oben in ein leeres .pb mit Default-Compilereinstellungen und dann kompilieren.

PS: Was musste man nochmal machen, wenn der Beitrag überbreite hat?

__________________________________________________
Leerzeichen hinzugefügt
28.06.2016
RSBasic

Re: Kompiliertes Binary unter Windows = Archiv?

Verfasst: 28.06.2016 14:34
von RSBasic
Der Tab "Archiv" wird ja schon dann angezeigt, wenn man nur "UseLZMAPacker()" kompiliert.
Den Entpacken-Eintrag im Kontextmenü habe ich trotzdem nicht. Ist das von Windows oder vielleicht von einem Programm wie 7Zip?
Getestet habe ich es mit 5.50 Beta 1.
DarkSoul hat geschrieben:Leider kann ich in diesem Forum die Dateiupload-Funktion nicht finden. Sonst würde ich eine .EXE und Screenshots liefern.
Das Forum bietet in der Tat keine Upload-Funktion an, aber du kannst die externen Dienste nutzen und den Link hier einfügen. Einfach mal nach "file uploader" googlen.
DarkSoul hat geschrieben:PS: Was musste man nochmal machen, wenn der Beitrag überbreite hat?
Leerzeichen dazwischen einfügen. Diese habe ich in deinem Code jetzt eingefügt.

Re: Kompiliertes Binary unter Windows = Archiv?

Verfasst: 28.06.2016 14:50
von _JON_
Scheint als reicht der kleine "7z¼¯ String im LZMA packer schon aus damit WinRAR denkt es wäre ein Archiv.

Glaube nicht das man da was gegen tun kann.

Re: Kompiliertes Binary unter Windows = Archiv?

Verfasst: 28.06.2016 15:02
von RSBasic
Stimmt ja, der Tab "Archiv" stammt ja von WinRAR und da ich eh keine zusätzlichen Kontextmenü-Einträge aktiviert habe, gibt es bei mir auch keinen Eintrag. Würde ich es aktivieren, gibt es dieser zusätzliche Kontextmenü-Eintrag bei mir auch.
Also ist das weder ein PB- noch ein Windows-Bug, sondern nur ein Standardverhalten von WinRAR.

Re: Kompiliertes Binary unter Windows = Archiv?

Verfasst: 28.06.2016 16:32
von udg
als externe Dienste kann ich empfehlen:

www.abload.de für Bilder
und
www.zippyshare.com für Files.

:)
Grüße

Re: Kompiliertes Binary unter Windows = Archiv?

Verfasst: 28.06.2016 16:44
von DarkSoul
Ach der Tab kommt von WinRAR? Gut, das habe ich nicht gewusst. Ich dachte, er wäre von Windows.

WinRAR ist hier irgendwie noch drauf, weil ich zu faul bin, das zu löschen. Ich benutze idr. 7-Zip :mrgreen:

Auf solche dubiosen Hoster lade ich nichts hoch.

Re: Kompiliertes Binary unter Windows = Archiv?

Verfasst: 28.06.2016 17:03
von RSBasic
DarkSoul hat geschrieben:Auf solche dubiosen Hoster lade ich nichts hoch.
Inwiefern? Geht es um Datenschutz oder um die langfristige Verfügbarkeit?