2009-05-16 5 views
2

Meine Windows-Mitarbeiter fragten mich, ob ich meine Nicht-Windows-Binärdateien so ändern könnte, dass ihre "Eigenschaften" unter Windows eine "Version" -Registerkarte sehen würden, die für ein kompiliertes Visual Studio angezeigt würde exe.Kann VS_VERSION_INFO zu Nicht-EXE-Dateien hinzugefügt werden?

Insbesondere habe ich einige Binärdateien gezippt und fragte mich, ob ich sie ändern könnte, um diese Nachfrage zu befriedigen. Wenn es einen besseren Weg gibt, wäre das auch in Ordnung.

Gibt es eine Möglichkeit, meine Binärdateien als EXE-Dateien erscheinen zu lassen?

Ich versuchte einfach, den Block VS_VERSION_INFO von notepad.exe an das Ende eines meiner Binärdateien anzuhängen, in der Hoffnung, dass Windows nach dem Block sucht, aber es hat nicht funktioniert.

Ich habe versucht, die anderen Informationen in Bezug auf Autor, Betreff, Revision usw. zu bearbeiten. Das ändert die Datei nicht, es erstellt nur einen anderen Datenzweig (wie lautet der Windows-Begriff?) Für die Datei in NTFS.

Antwort

1

Es wird von Windows nicht unterstützt, da jeder Dateityp ein eigenes Dateiformat hat. Aber das bedeutet nicht, dass du es nicht schaffen kannst. Die in dlls und exes gespeicherten Ressourcen sind Teil des Dateiformats.

Anzeige für den Benutzer:

Wenn Sie diese Informationen wollte dem Benutzer angezeigt werden soll, ist dies wahrscheinlich am besten würde erreicht eine Eigenschaftsseite Shell-Erweiterung mit der Verwendung. Sie würden eine ähnlich aussehende Seite erstellen, aber es würde nicht die exakt gleiche Seite verwenden. Es gibt eine wirklich gute multi part tutorial on shell extensions, einschließlich Eigenschaftenseiten, die mit diesem Link beginnen.

Wo tatsächlich die Ressource speichern:

Statt einen Block in die Datei von Anhängen, könnten Sie die Ressource in einem separaten alternate data stream auf derselben Datei speichern. Dadurch würde der ursprüngliche Dateistream nicht auf dem Datenträger beschädigt und die primäre Dateigröße nicht geändert.

Alternative Datenströme ermöglichen die Zuordnung von mehr als einem Datenstrom zu einem Dateinamen. Jeder Stream wird durch einen Doppelpunkt : am Ende des Dateinamens und eine Kennung identifiziert.

Sie können sie zum Beispiel erstellen, indem Sie:

Notizblock test.txt: adsname1
Notizblock test.txt: adsname2
Notizblock test.txt

gibt es die normale Win32 Wirksame APIs:

Wenn Sie möchten, dass die normale API funktioniert, müssten Sie intercept the Win32 APIs: LoadLibraryEx, FindResource, LoadResource und LockResource. Dies ist jedoch wahrscheinlich nicht die Mühe wert, da Sie bereits eine eigene Eigenschaftenseite erstellen.

0

Kann mir keine Möglichkeit vorstellen, dies zu tun, kurz einer Shell-Erweiterung. Der Ansatz, den ich in der Vergangenheit verfolgt habe, ist ein separates "Zensus" -Programm, das weiß, wie man Versionsinformationen aus jeder Art von Datei liest.

Zip-Dateien können in exe-Dateien konvertiert werden, indem ein Programm verwendet wird, das eine Zip-Datei in eine selbstextrahierende Zip-Datei verwandelt (ich weiß, dass WinZip dies tut, es gibt höchstwahrscheinlich auch kostenlose Dienstprogramme dafür; here's one that came up on a search aber ich habe ' t versuchte es tatsächlich). Sobald Sie eine exe haben, sollten Sie ein Werkzeug wie Resource Hacker verwenden können, um die Versionsinformationen zu ändern.

+0

Der einzige Teil meiner Datei, der geändert werden kann, ist das Ende. Es ist ein Linux-Kernel und eine Ramdisk. Und ich habe bereits mein eigenes kleines Programm geschrieben, das den Enden dieser Dateien einen 1024-Bit-Block hinzufügt. Der Inhalt des Blocks ist dem Benutzer überlassen. – Harvey

+0

Ein eigenständiges Dienstprogramm könnte die beste Wahl sein. Sie können die Verwendung eines solchen Dienstprogramms im Explorer vereinfachen, indem Sie (1) eine Rechtsklick-Aktion hinzufügen, die für alle Dateien funktioniert (z. B. "Siehe Versionsinfo mit Harvey's Viewer") und (2) Drag & Drop unterstützt dass Sie eine Datei aus dem Explorer in die App ziehen können. – jdigital

+0

Ich schrieb ein kleines Shell-Skript-Dienstprogramm (für die Linux-Seite), das einen benutzerdefinierten 1k-Block anhängen/ändern/entfernen wird, den der Benutzer mit allem füllen kann, was er möchte. – Harvey

0

Es wird nicht funktionieren. Entweder müsste Windows jedes Dateiformat kennen oder kein Dateiformat würde gestört werden, wenn Versionsinformationen an es angehängt würden.

+0

Nun, ich hatte gehofft, dass es wie ein ID3-Tag in einer MP3-Datei funktioniert. Es spielt keine Rolle, wo sich die TAG befindet. – Harvey

+0

ID3-Tag ist spezifisch für MP3 –

+1

Deshalb sagte er "wie", wie in "ähnlich". – Joe

0

Nein, Ressource Abschnitt wird nur innerhalb PE (portable ausführbare Datei; exe, dll, sys) erwartet.
Es ist mehr als nur die Daten in die Datei zu setzen, Sie haben eine Tabelle, die auf die Daten in der Dateikopfzeile zeigt.

Was Sie tun können, wenn Sie NTFS-Laufwerk haben, ist NTFS stream to store custom properties auf diese Weise verwenden der Kontakt der Binärdatei wird gleich bleiben, aber Sie müssen eine benutzerdefinierte Shell-Erweiterung verwenden, um den Inhalt des Streams anzuzeigen.

+0

Der PE/COFF-Zeiger ist hilfreich. Ich denke darüber nach, ob der Stream-Ansatz für mich funktioniert. Diese beiden Dateien sind in einem ext2-Dateisystem erstellt, aber sie werden schließlich kopiert und leben in einer NTFS-Partition. – Harvey

Verwandte Themen