![]() |
Aufruf von Resource will nicht funktionieren
hallo habe folgenden Code um eine Datei aus einer Res-datei auszuführen
Delphi-Quellcode:
die Mainform wird aufgerufen, ohne fehler, jedoch die Test.exe nicht aus der test.res entpackt und auch nicht ausgeführt.
implementation
{$R *.dfm} {$R F:\Test.res} function ExtractResTo(Instance: LongWord; BinResName, NewPath, ResType: PChar): Boolean; (******************************************************************************* Function: ExtractResTo Returns: Boolean (true=success) Version: Function version 3.0[mod] Parameters modified, SEH stripped. *******************************************************************************) var ResSize, HG, HI, SizeWritten, hFileWrite: LongWord; begin result := false; HI := FindResource(Instance, BinResname, ResType); if HI <> 0 then begin HG := LoadResource(Instance, HI); if HG <> 0 then begin ResSize := SizeOfResource(Instance, HI); hFileWrite := CreateFile(NewPath, GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE, nil, CREATE_ALWAYS, FILE_ATTRIBUTE_ARCHIVE, 0); if hFileWrite <> INVALID_HANDLE_VALUE then begin result := (WriteFile(hFileWrite, LockResource(HG)^, ResSize, SizeWritten, nil) and (SizeWritten = ResSize)); CloseHandle(hFileWrite); end; end; end; end; procedure TForm1.FormCreate(Sender: TObject); begin ExtractResTo(HInstance,'Test.res','F:\',RT_RCDATA); ShellExecute(Application.Handle, 'open', 'F:\Test.exe',nil,nil,SW_SHOW); end; Der Inhalt der RC-Datei die mit BCC32 ausgeführt wurde war wie folgt: Zitat:
wäre dankbar, wenn jemand den Aufruf, sofern dieser falsch sein sollte korrigiert oder einen anderen fehler der ursächlich ist. |
Re: Aufruf von Resource will nicht funktionieren
Moin Avax2k,
probiere doch mal so:
Delphi-Quellcode:
Grüße vom marabu
procedure TForm1.FormCreate(Sender: TObject);
begin ExtractResTo(HInstance, 'Prog1', 'F:\Test.exe', RT_RCDATA); ShellExecute(Application.Handle, 'open', 'F:\Test.exe', nil, nil, SW_SHOW); end; |
Re: Aufruf von Resource will nicht funktionieren
hallo marabu
und schon wieder hast du mir weitergeholfen, denn es funktioniert. Ich habe jedoch ein kleines Problem und zwar die Test.exe ist, wenn sie auf der Platte ist kopierbar. Gibt es eine Möglichkeit das Kopieren der Datei zu verhindern? |
Re: Aufruf von Resource will nicht funktionieren
Dazu fallen mir zwei Sachen ein. Wenn du deine Resource auf meinem Rechner auspacken willst, dann wird dein Programm scheitern, da es bei mir kein F Laufwerk gibt. Und wenn dein ausgepacktes Programm jemals laufen soll, dann braucht der Starter das EXECUTABLE Recht, welches unter Windows mit dem READ Recht verknüpft ist. Abgesehen davon, dass auf vielen Rechnern XP Home läuft und dort diese Rechte nicht zur Verfügung stehen, kannst du auch nicht einfach ein Benutzer-Konto auf einer fremden Maschine einrichten, dem du exklusiven Zugriff auf diese ausführbare Datei gibst. Was hast du denn vor?
marabu |
Re: Aufruf von Resource will nicht funktionieren
mir ist bewusst, dass nur wenige eine F:\ Partition besitzen, jedoch habe ich dies mit F:\ lediglich getestet ob mein Programm auch wirklich das tut, was ich will, im späteren Programm würede ich es dann abändern.
Was ich dadurch erreichen will ist, ich möchte Dateien einbinden, die nur beim Ausführen eines bestimmten Befehls im Hauptprogramm aus der hauptanwendung extrahiert und ausgeführt werden. Will damit verhindern, dass die Leute sich bestimmte Dateien einfach so kopieren können, wenn es Sound dateien sind zum Beispiel und dann ohne mein Programm einfach in jedem Player abspielen könnten. Habe mir überlegt die Dateien nur in den Speicher zu lesen und nicht auf die Platte zu schreiben, aber das würde bei Systemen mit wenig Arbeitsspeicher zu großen Problemen führen und das System nur unnötig ausbremsen. Wobei wenn ich jeweils nur immer eine datei laden würde, könnte es gehen auch wenn diese 100mb ist da ja heutzutage die Windows XP Rechner mindestens 256MB Ram haben..oder doch nicht ?! jedenfalls bin ich für andere Lösungswege aufgeschlossen :) |
Re: Aufruf von Resource will nicht funktionieren
Vergiss es. Sollten sie nicht verschlüsselt in der Ressource stehen, kannst du sie mit jedem beliebigen ResHacker da rauskopieren.
|
Re: Aufruf von Resource will nicht funktionieren
du hast recht, an diese Idee habe ich gar nicht gedacht..es würde somit ausreichen, dass ich zuerst meine Datei durch einen Ecoder schicke und die Dateiendung beibehalte.
Sprich: wave1.wav --> Encoder ausgeführt --> wave1.wav die nicht mehr abgespielt werden kann beim Doppelklick da Fehlermeldung kommt, dass es keine gültige wav-Datei ist. Dann könnte ich diese als Wave deklarierend in die Res packen und erst im Hauptprogramm den Encoder nach dem Aufruf der Datei starten mit dem Ergebnis, dass die Datei auf der Platte immer verschlüsselt wäre, auch in der Res und nur vom Programm entschlüsselt. Somit würde jeder, der die Datei beim Entpacken aus der Res kopiert, nichts mit ihr anfangen können..es sei denn er hätte jetzt meinen Decoder..oder die verschlüsselung eben geknackt. ich denke aber wenn ich RC4 verwende, sollte dies Problem für immer erledigt sein, oder was meint ihr ? |
Re: Aufruf von Resource will nicht funktionieren
Vergiss es. :mrgreen:
Wenn alle Stricke reißen, kann man immernoch vom Lautsprecherausgang aufnehmen :P Mal abgesehen, dass du sowisoeine entschlüsselte Datei auf der Festplatte ablegen musst, wenn du keinen eigenen Player schreiben willst. Warum willst du deine Audiodateien eigendlich auf gedeh und verderb schützen ? Und zur Not kann man die Entschlüsselungsroutine deines Programms kopieren, und dann die Ressourcen entschlüsseln, du siehst, es gibt quasi keinen wirksamen Schutz. |
Re: Aufruf von Resource will nicht funktionieren
es geht auch darum Otto-Normal Verbraucher davon abzuhalten Kopien anzufertigen.
Klar können die Profis jedes Programm knacken, aber wenn jeder so denken würde, wie du dann würde keine Softwarefirma einen Schutz machen sondern ihre Programme gleich verschenken. Und die Entschlüsselungsroutine aus meinem Programm zu extrahieren ist eine Aufgabe die kein Möchtegern Hacker im Stande ist zu bewältigen, sondern eben dann nurjenigen, die auch in der Lage sind High-End geschützte Produkte mit Dongle Simulation usw. zu knacken. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:36 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz