Anhängen einer Datei an das Programm

Hallo,

Ich würde gerne an mein Programm eine Datei anhängen, die es dann wieder auf den Rechner kopieren soll, also eine Art Setupprogramm. Hab leider noch nichts gefunden wie das funktioniert, hab das Visual Studio 2008 Express Edition, also kann ich keine Ressource Editor benutzen, so viel ich weiß. Wenn doch könnte mir vielleicht jemand erklären wie das funktioniert, oder ob es eine andere Möglichkeit gibt?

Gruß Michael

Hallo!

funktioniert, oder ob es eine andere Möglichkeit gibt?

Eine vielleicht etwas krude Idee: Nachträglich was ranhängen. Also mit einem Progrämmchen/Script an die exe den Anhang ranhängen und daran noch 4 Byte ranhängen, in denen als uint die Startposition des Anhangs steht (ursprüngliche exe-Größe + 1). Wird dann die Exe ausgeführt, liest sie sich eben selbst ein, holt sich aus den letzten 4 Byte die Startposition und schreibt dann alles ab der Startposition bis zum Ende minus 4 Byte raus.

Voraussetzung ist, dass .NET-exes immer garantiert laufen, wenn man an sie was ranhängt (steht sicherlich irgendwo) und das exes immer Leseberechtigung auf die exe selbst haben.

Jan

Hallo,

Ich würde gerne an mein Programm eine Datei anhängen, die es
dann wieder auf den Rechner kopieren soll, also eine Art
Setupprogramm. Hab leider noch nichts gefunden wie das
funktioniert, hab das Visual Studio 2008 Express Edition, also
kann ich keine Ressource Editor benutzen, so viel ich weiß.
Wenn doch könnte mir vielleicht jemand erklären wie das
funktioniert, oder ob es eine andere Möglichkeit gibt?

Hier ein Tutorial für Selfextractor , da es eine source gibt wird dir das bestimmt weiter helfen können.
http://www.codeproject.com/KB/winsdk/selfextract.aspx

Hallo

Du brauchst ein resource script (Textdatei mit der Dateinamenerweiterung .rc):

// resource.rc
#include "resource.h"

MY\_RESOURCE MY\_RESOURCE\_TYPE "filename.ext"

Einen resource.h:

// resource.h
#define MY\_RESOURCE 2 // Must be a number greater than 1 (1 = exe icon)
#define MY\_RESOURCE\_TYPE 300 // Must not be a reserved type (BITMAP, ICON, etc.)

Dann kannst du die Daten im Programm laden:

#include "resource.h"
...
HRSRC hRes = FindResource(NULL, MAKEINTRESOURCE(MY\_RESOURCE), MAKEINTRESOURCE(MY\_RESOURCE\_TYPE));
HGLOBAL hGlobalRes = LoadResource(NULL, hRes);
unsigned char\* pResData = (unsigned char\*) LockResource(hGlobalRes);
DWORD nSize = SizeofResource(NULL, hRes);

// Access binary resource data

FreeResource(hGlobalRes);

Das sollte auch in VS Express möglich sein. Bei mir (MinGW) funktioniert der Code problemlos.

mfg dixxi