Entwickler-Ecke

Sonstiges (Delphi) - Programm auf anderem Rechner ausfuehren


Delete - Di 06.02.07 20:26
Titel: Programm auf anderem Rechner ausfuehren
Hallo,

ich habe ein Programm geschrieben und wollte es einem Freund, der kein Delphi besitzt, geben (d.h. er hatte mal Delphi 3 auf'm Rechner). Sowohl er als auch ich besitzen Win XP - er ohne SP - ich: SP2. Ich habe die Referenzen lokal kopiert und ihm mitgegeben. Trotzdem kommt auf seinem Rechner ein Fehler (s. Anhang).
Kann mir jemand sagen, woran das liegt?

Danke im voraus!!!


jakobwenzel - Di 06.02.07 21:52

Das liegt an Z. 123 in Unit1.pas. Falls es die Unit nicht gibt, oder weniger Zeilen hat, ist dein Delphi kaputt und muss neu installiert werden. (Am besten installierst du Windows auch gleich neu, es kann nämlich sein, dass der Fehler bleibt.) :?

Spaß beiseite: Das kann an vielem liegen, meistens fehlende Zusatzprogramme, oder durch Antivirenprogs geblockte Funktionen, ...
Sag einfach mal, was das Programm genau macht, welche Units es benutzt, ... :wink:


Delete - Di 06.02.07 21:56

Das Programm verschleiert Texte. Anschließend koennen die Texte in die Zwischenablage kopiert werden. Das Programm ist klein und besitzt 2 Units.


Narses - Di 06.02.07 22:06

Moin!

Ich fürchte, du wirst nicht drum rum kommen, uns den Quelltext der Anwendung zu zeigen - so kommen wir nicht weiter... :|

Wenn es denn unbedingt sein muss, kannst du ja den Teil zum ver-/entschlüsseln unkenntlich machen; daran wird´s ja vermutlich nicht liegen (wobei Verschlüsslungsverfahren, die den Code als Geheimnis haben, meist eh nicht schwer zu knacken sind...). ;)

cu
Narses


Delete - Mi 07.02.07 20:50
Titel: Re: Programm auf anderem Rechner ausfuehren
Also hier sind die 2 Units, es handelt sich eher um eine Verschleierung, wie schon gesagt.

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:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
unit verschluesselung_Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Borland.Vcl.StdCtrls, System.ComponentModel, Clipbrd,
  Borland.Vcl.ActnList, Borland.Vcl.ExtCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Memo2: TMemo;
    Memo1: TMemo;
    Label3: TLabel;
    Label4: TLabel;
    Button2: TButton;
    Edit2: TEdit;
    Memo3: TMemo;
    Memo4: TMemo;
    Button3: TButton;
    Button4: TButton;
    ComboBox1: TComboBox;
    ComboBox2: TComboBox;
    Timer1: TTimer;
    Label5: TLabel;
    Label6: TLabel;
    procedure Timer1Timer(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);

    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  key, text, keytext: String;
  ti, ki, alpha: integer;
  key1, text1, keytext1: String;
  ti1, ki1, alpha1: integer;
  b: boolean=false;

implementation

uses verschluesselung_Unit2;

{$R *.nfm}


procedure TForm1.Button1Click(Sender: TObject);
begin
  if edit1.text <> '####'
     then
        begin;
        showmessage('Bitte geben Sie das korrekte Schlüsselwort an!');
        exit;
        end;
  alpha:=#;
  if Combobox1.ItemIndex=0
     then
        alpha:=#;
  if Combobox1.ItemIndex=1
     then
        alpha:=#;
  if Combobox1.ItemIndex=2
     then
        alpha:=#;
  if (edit1.Text=''or (Memo1.text='')
     then
        begin;
        showmessage('Bitte Füllen Sie beide Felder aus!');
        exit;
        end;
  if alpha=#
     then
        begin
        showmessage('Bitte geben Sie die Codierung an!');
        exit;
        end;
  key:=edit1.Text;
  text:=memo1.Text;
  keytext:=text;
  ki:=1;
  for ti:=1 to length(text) do
     begin
     keytext[ti]:=char(ord(key[ki])+ord(text[ti])+ord(alpha));
     if keytext[ti]=''
        then
        keytext[ti]:='0';
     inc(ki);
     if ki>length(key)
        then
           ki:=1;
     end;
  memo2.Text:=keytext;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  if edit2.text <> '####'
     then
        begin;
        showmessage('Bitte geben Sie das korrekte Schlüsselwort an!');
        exit;
        end;
  alpha1:=#;
  if Combobox2.ItemIndex=0
     then
        alpha1:=#;
  if Combobox2.ItemIndex=1
     then
        alpha1:=#;
  if Combobox2.ItemIndex=2
     then
        alpha1:=#;
  if (edit2.Text=''or (Memo3.text='')
     then
        begin;
        showmessage('Bitte Füllen Sie beide Felder aus!');
        exit;
        end;
  if alpha1=#
     then
        begin
        showmessage('Bitte geben Sie die Codierung an!');
        exit;
        end;
  key1:=edit2.Text;
  text1:=memo3.Text;
  keytext1:=text1;
  ki1:=1;
  for ti1:=1 to length(text1) do
     begin
     keytext1[ti1]:=char(ord(text1[ti1])-ord(key1[ki1])-ord(alpha1));
     inc(ki1);
     if ki1>length(key1)
        then
           ki1:=1;
     end;
  memo4.Text:=keytext1;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  Clipboard.AsText:=keytext;
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
  Clipboard.AsText:=keytext1;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if b=false
     then
        begin
        form2.Show;
        end;
end;

end.



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:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
unit verschluesselung_Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Borland.Vcl.StdCtrls, System.ComponentModel;

type
  TForm2 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Button1: TButton;
    Button2: TButton;
    Edit1: TEdit;
    procedure Edit1KeyPress(Sender: TObject; var Key: Char);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form2: TForm2;
  c: boolean=false;

implementation

uses verschluesselung_Unit1;

{$R *.nfm}

procedure TForm2.Button2Click(Sender: TObject);
begin
  b:=true;
  form1.close;
end;

procedure TForm2.Button1Click(Sender: TObject);
begin
  if edit1.text='####'
     then
        begin
        b:=true;
        c:=true;
        form2.close;
        end
     else
        begin
        b:=true;
        edit1.Text:='';
        showmessage('Bitte geben Sie das korrekte Kennwort ein!');
        b:=false;
        exit;
        end;
end;

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  b:=true;
  if c=false
     then
        form1.close;
end;

procedure TForm2.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  if (key in[char(VK_RETURN)])
     then
        button1.click;
end;

end.


Delete - Mi 07.02.07 22:29
Titel: Re: Programm auf anderem Rechner ausfuehren
Kann mir jetzt jemand helfen??? Kann es sein, dass es daran liegt, dass er einen Dell-Rechner hat???


Narses - Fr 09.02.07 00:41

Moin!

:? Schiebepostings sind hier erst nach 24 Stunden erlaubt! :mahn:

Ansonsten: sag mal, hast du ein .NET-Projekt erstellt und dein Freund hat das Framework nicht installiert?! :gruebel:

cu
Narses


oldmax - Fr 09.02.07 07:45

Hi
Wenn du Delphi hast, ist meist Install Shield Express dabei. Damit kannst du deine Programme "installierbar" machen. Also, nicht nur die Exe als Kopie, sondern alle benötigten Elemente werden eingebunden. Du bekommst ein gepacktes Programm mit einer Installationsroutine. Ist ein wenig gewöhnungsbedürftig, aber bisher sind alle meine Programme damit auf anderen Rechnern gelaufen. Ach ja, ein möglicher Fehler ist, wenn das Betriebssystem der Zielmaschine älter ist, wie das auf dem Entwicklungs-PC. Das geht auch nicht immer mit dem Install- dingsbums.
Gruß oldmax


Delete - So 11.02.07 15:57

Ich besitze Delphi 2005 PE, soweit ich gesehen habe, ist leider kein Install Shield Express vorhanden. Wo kann ich mir den eventuell runterladen?


Blackheart666 - So 11.02.07 16:20

Du könntest Auch mal dein Komplettes Prog hier anhängen dann könnte man das eventuell mal nach vollziehen.


Narses - So 11.02.07 18:41

user profile iconNarses hat folgendes geschrieben:
hast du ein .NET-Projekt erstellt und dein Freund hat das Framework nicht installiert?!


Delete - Mo 12.02.07 14:15
Titel: Re: Programm auf anderem Rechner ausfuehren
Mein Freund hat das Framework nicht installiert, aber genau deswegen hab ich ihm ja die Referenzen mitgegeben. Sobald er wieder aus dem Urlaub da ist, werde ich das gleiche Programm mit Win32 noch einmal ausprobieren!


Narses - Mo 12.02.07 14:32

Moin!

user profile iconma$ter hat folgendes geschrieben:
Mein Freund hat das Framework nicht installiert, aber genau deswegen hab ich ihm ja die Referenzen mitgegeben.

.NET-Projekte laufen nicht ohne FrameWork, egal was zu mitgibst :mahn: (mit Ausnahme des FrameWork-Setup, natürlich :P).

user profile iconma$ter hat folgendes geschrieben:
werde ich das gleiche Programm mit Win32 noch einmal ausprobieren!

Was die Lösung ist. ;)

cu
Narses


Delete - Di 13.02.07 14:29

Meiner Meinung nach falsch, denn ich hab .NET-Programme auch schon auf Rechnern die kein Framework haben ausprobiert, mit den Referenzen!!! Trotzdem Danke!!!