Kompiliertes Binary unter Windows = Archiv?

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
DarkSoul
Beiträge: 689
Registriert: 19.10.2006 12:51

Kompiliertes Binary unter Windows = Archiv?

Beitrag 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
Bild
Benutzeravatar
udg
Beiträge: 566
Registriert: 20.06.2013 23:27

Re: Kompiliertes Binary unter Windows = Archiv?

Beitrag 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
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE!. Kauft Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Kompiliertes Binary unter Windows = Archiv?

Beitrag 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.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
DarkSoul
Beiträge: 689
Registriert: 19.10.2006 12:51

Re: Kompiliertes Binary unter Windows = Archiv?

Beitrag 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
Bild
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Kompiliertes Binary unter Windows = Archiv?

Beitrag 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.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
_JON_
Beiträge: 389
Registriert: 30.03.2010 15:24

Re: Kompiliertes Binary unter Windows = Archiv?

Beitrag 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.
PureBasic 5.46 LTS (Windows x86/x64) | windows 10 x64 Oktober failure
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Kompiliertes Binary unter Windows = Archiv?

Beitrag 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.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
udg
Beiträge: 566
Registriert: 20.06.2013 23:27

Re: Kompiliertes Binary unter Windows = Archiv?

Beitrag von udg »

als externe Dienste kann ich empfehlen:

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

:)
Grüße
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE!. Kauft Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
Benutzeravatar
DarkSoul
Beiträge: 689
Registriert: 19.10.2006 12:51

Re: Kompiliertes Binary unter Windows = Archiv?

Beitrag 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.
Bild
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Kompiliertes Binary unter Windows = Archiv?

Beitrag von RSBasic »

DarkSoul hat geschrieben:Auf solche dubiosen Hoster lade ich nichts hoch.
Inwiefern? Geht es um Datenschutz oder um die langfristige Verfügbarkeit?
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Antworten