Autor Beitrag
_Dominik_
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Mi 16.02.11 18:02 
Hallo, liebe Community!

Ich hab mich grad frisch angemeldet, und würd euch in diesem Zuge direkt mit einem Problem konfrontieren... ich hoffe, niemand nimmt's mir krumm ;)


Also, folgendes hab ich vor:


Da ich aktuell überlege, einen Launcher für ein eigenes Spiel (das noch lang nicht fertig ist) zu schreiben, der unter anderem eine Serial-Nr. Abfrage wie diverse andere Sachen integriert haben soll, arbeite ich mit Delphi 7 und hab mich grade frisch in die Sache mit den Ressourcen eingearbeitet.


Hier ist das Problem:

Ich möchte eine externe, nicht in Delphi geschriebene .exe als Ressource in mein Programm einfügen, und diese dementsprechend aufrufen können. Das Einbinden als Ressource (ich hab probeweise mal lala.res genommen) klappt prima, aber ich finde den Befehl nicht, um darauf jetzt zuzugreifen, beispielsweise mit Winexec.


Hier ist mein aktueller Code:
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ShellApi;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;


implementation

{$R *.dfm}
{$R lala.res}

procedure TForm1.Button1Click(Sender: TObject);
begin
  WinExec ('MyGame.exe',0);
end;

end.


Die Datei MyGame.exe sollte halt in der Delphi-Anwendung integriert sein, und auch nur von ihr aus ausgeführt werden (ich möchte sie also nicht extern mitliefern müssen).


Hoffe, jemand kann mir helfen, und kennt den Befehl, um jetzt noch auf die in lala eingebundene Datei zuzugreifen ;)


Freundlichen Gruß,

- Dominik

Moderiert von user profile iconNarses: Color- durch Delphi-Tags ersetzt.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 16.02.11 18:05 
Hallo und :welcome:

Erstens musst (*) du die Datei zuerst aus deiner Exe auspacken (z.B. mit TResourceStream, am besten ins Tempverzeichnis).

Zweitens nimm niemals WinExec, das ist 20 Jahre alt und sollte nicht mehr verwendet werden. Nimm lieber ShellExecute oder CreateProcess.

(*) Ja, ich weiß, dass es auch anders geht, aber nicht sinnvoll und nicht einfach...

Für diesen Beitrag haben gedankt: _Dominik_
_Dominik_ Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Mi 16.02.11 18:17 
Herzlichen Dank, jaenicke! :)

:zustimm:

Puh, ich wusste, dass ich mir da ganz schön was vorgenommen hab, aber es überrollt mich doch ganz schön...



~EDIT~

Ich hab jetzt folgenden Code aus einem Tutorial, das ich einigermaßen einfach fand, zusammengeschraubt (lila = neu hinzugefügt)


ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ShellApi;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;


implementation

{$R *.dfm}
{$R lala.res}

procedure TForm1.Button1Click(Sender: TObject);
var trs:TResourceStream;
    S: String;
begin
  trs := TResourceStream.Create(HInstance,'lala','RCDATA');
  try TRS.SaveToFile(S); finally TRS.Free;end;
end;


end.



Ich bekomme jetzt folgende Fehlermeldung, wenn ich auf den Button klicke im laufenden Test-Programm:

Zitat:
Project Project1.exe raised exception class EResNotFound with message 'Resource lala not found'. Process stopped. Use Step or Run to continue.



Ich hab schon lala.res, MyGame.exe statt dem lala versucht, aber es klappt nicht. :(

Moderiert von user profile iconMartok: Delphi-Tags & Zitat gesetzt
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 16.02.11 19:50 
Dann hast du einen anderen Namen oder Typ als du hier hingeschrieben hast. Nach deinem Code müsste dein Ressourcenskript so aussehen:
ausblenden Quelltext
1:
lala  RCDATA  MyGame.exe					
Wie sieht es denn aus?

Für diesen Beitrag haben gedankt: _Dominik_
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Mi 16.02.11 19:54 
Hallo!

Bitte verwende für Quellcode die entsprechenden [delphi]-Tags, dann wird er "schöner" dargestellt als im Fließtext. Beispiel:
ausblenden Quelltext
1:
<span class="inlineSyntax"><span class="codecomment">{PROTECTTAGbb7f0ea1bc888f796f67ea871e6bbcc1}</span></span>					

Wird:
ausblenden Delphi-Quelltext
1:
var Test: integer;					


Viele Grüße,
Martok

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
_Dominik_ Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Mi 16.02.11 21:39 
@Martok

Alles klar, pardon - musste mich jetzt erst mal hier zurechtfinden, und hab das System mit dem Ausklappen der Funktionen jetzt erst so ganz geschnallt. Werd ich ab jetzt machen :)

@jaenicke

Der Typ stimmt nicht, das war's - ich hab rc_data in der .res, aber im Code rcdata. Dass das jetzt so viel ausmacht, find ich ja fast schon etwas albern... wie auch immer, Danke für deine Geduld und hilfreichen Tipps!

Super, jetzt kann's weitergehen! Klasse :dance2:


Eine Frage hätte ich noch:

Ist es denn wirklich unmöglich, das Programm MyGame.exe quasi von 'innerhalb' der Delphi-Anwendung zu starten? Wär schade... :o
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 16.02.11 21:49 
user profile icon_Dominik_ hat folgendes geschrieben Zum zitierten Posting springen:
Ist es denn wirklich unmöglich, das Programm MyGame.exe quasi von 'innerhalb' der Delphi-Anwendung zu starten? Wär schade... :o
Unmöglich nicht, aber nur mit relativ hässlichen Tricks. Und die führen dann oft dazu, dass Virenscanner Verdacht schöpfen und das Programm als Virus erkennen. Zudem ist es relativ kompliziert.
Ein Beispiel findest du hier:
www.michael-puff.de/...Delphi/Importe/Nico/ (inmemexe.zip)

Aber ich verstehe ohnehin nicht was das ganze bringen soll. Ich meine, wozu ein Launcher, wenn das Programm doch ohnehin auch von dir ist? Da reicht schließlich eine Exe, dann hast du das ganze Problem nicht. :gruebel:

Und wegen der Seriennummerabfrage:
Das ist ohnehin Blödsinn. Entweder ist das Programm es wert, dann findet sich auch jemand, der es (meistens in Minuten) knackt, oder es ist das nicht wert, dann kannst du dir die Seriennummer auch sparen...
_Dominik_ Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Do 17.02.11 00:21 
Hmmm... na schön, so wichtig ist es dann nicht. Da scheint diese Lösung wohl wirklich die beste zu sein!
Danke nochmals!

Zitat:
Aber ich verstehe ohnehin nicht was das ganze bringen soll. Ich meine, wozu ein Launcher, wenn das Programm doch ohnehin auch von dir ist?


Mein Spiel mache ich mit einem Creator, also keiner wirklichen Programmiersprache. Da diese Teile nun oft sehr limitiert sind, möchte ich mit einem Launcher etwas Komfort hinzufügen, also etwa Grafikoptionen etc. - und nebenher würd ich halt gern diese Seriennummer wenigstens einmal vorher abfragen, und entsprechend der Eingabe entweder die Demo oder die Vollversion entpacken und dann starten (so ungefäähr! ;) )

Zitat:
Und wegen der Seriennummerabfrage:
Das ist ohnehin Blödsinn. Entweder ist das Programm es wert, dann findet sich auch jemand, der es (meistens in Minuten) knackt, oder es ist das nicht wert, dann kannst du dir die Seriennummer auch sparen...


Nichts für ungut, da mag was dran sein, aber - unter diesem Gesichtspunkt kannst du eigentlich nicht mal mehr deine Haustür schließen, wenn du raus gehst ;)


Jedenfalls: Problem gelöst! Danke :beer:
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 17.02.11 00:25 
user profile icon_Dominik_ hat folgendes geschrieben Zum zitierten Posting springen:
Nichts für ungut, da mag was dran sein, aber - unter diesem Gesichtspunkt kannst du eigentlich nicht mal mehr deine Haustür schließen, wenn du raus gehst ;)
Das war jetzt nur eine kurze Zusammenfassung längerer Threads in diesem und anderen Foren. ;-)
Oft gängelt man nur diejenigen, die bezahlen, während die pöhsen Raubkopierer viel weniger Mühe haben, weil es einfach so geht, ohne Freischaltung usw. ;-) Das sollte man immer im Hinterkopf haben, wenn man einen solchen Schutz entwickelt, wenn man es denn tut. (Und dementsprechend versuchen es zumindest einfach für den User zu halten.)