Entwickler-Ecke

Internet / Netzwerk - Indy 10 Delphi 7


chickenfigt1989 - Sa 03.04.10 16:51
Titel: Indy 10 Delphi 7
Hey
Habe versucht die Indy 10 komponenten zu installieren.

Ich habe wie auf der Homepage von Indy beschrieben die Indy Komponenten versucht zu Installieren.
Zuerst die Packages IndyCore, IndySystem, IndyProtocols kompiliert anschließend wollte ich die dclIndyCore70 und dclIndyProtocols70 installieren, allerdings wenn ich die dclIndyCore70 installieren will kommt folgende Fehlermeldung:
Cannot load Package 'IndyCore70' It Contains unit IdGlobal which is also contained in package indy70.
Was muss ich nun tun damit es geht?
Mfg


Moderiert von user profile iconNarses: Topic aus VCL (Visual Component Library) verschoben am So 04.04.2010 um 11:20


elundril - Sa 03.04.10 19:16

ich würd mal sagen die Unit IdGlobal aus der Liste entfernen.

lg elundril


chickenfigt1989 - Sa 03.04.10 19:47

Also wen du meinst ausm Ordner löschen dan geht es nicht.
Habe es gerade Probiert es tritt folgender fehler wie vorhin auf nur anstelle idGlobal kommt jetzt idWinSock2
lg


elundril - Sa 03.04.10 20:08

Nein, ich mein nicht das du die datei löschen sollst. Datei löschen <> aus liste entfernen!

Einfachste Methode wäre das du die Packagedatei mit dem Windows-Editor öffnest und dann die Zeile (!) rauslöscht in der IdGlobal steht. dann sollte es funktionieren. Aja, vorher die sicherungskopie nicht vergessen falls was schiefläuft. ;)

(und das gleiche dann mit allen dateien die auch noch die gleiche meldung werfen.)

lg elundril


chickenfigt1989 - Sa 03.04.10 20:41

Das hab ihc gemacht und das von WinSock2 auch gleich aber dan kamm eni Violate Acess Fehler oder wie der heißt.
Ich installier erstmal delphi neu und Test es dan nochmal.
lg

Eidt:// Reicht es wen ich die Alten Indy'a aus der komponenten Palette lösche?
lg


Xentar - Sa 03.04.10 21:22

user profile iconchickenfigt1989 hat folgendes geschrieben Zum zitierten Posting springen:
Eidt:// Reicht es wen ich die Alten Indy'a aus der komponenten Palette lösche?

ARGHS
das solltest du grundsätzlich tun, bevor du Indy 10 installierst. Danach sollte das auch mit der Installation funktionieren, ohne dass du die Projektdateien ändern musst..


chickenfigt1989 - Sa 03.04.10 21:48

Ja aber muss ich dan von Delphi ordner auch die Indy sachen rauslöschen oder reicht es nur in Delphi selber aus der Komponenten Palette zu nehmen?
Mfg


Xentar - Sa 03.04.10 22:01

user profile iconchickenfigt1989 hat folgendes geschrieben Zum zitierten Posting springen:
Ja aber muss ich dan von Delphi ordner auch die Indy sachen rauslöschen oder reicht es nur in Delphi selber aus der Komponenten Palette zu nehmen?
Mfg

Es reicht, wenn du in Delphi die entsprechenden Packages deinstallierst, und das somit nicht mehr in der Komponentenpalette ist, ja.
Außerdem musst du in den Umgebungsoptionen den Suchpfad ändern, sodass er die alten Indy Dateien nicht mehr findet.


chickenfigt1989 - Sa 03.04.10 22:05

OKe habe die alten indys runter bis auf den Suchpfad. Ich finde da keinen wo Indy steht. Sind die Indy's etwa unter lib oder so drin?
Und jetzt wollt ich die dlcIndyCore70.dpk installieren jetzt kommt folgende Fehlermeldung:
[Error] dclIndyCore70.dpk(34): 'END' expected but identifier 'IndySystem70' found
Lg


Xentar - Sa 03.04.10 22:07

Tja, ohne nun den Quellcode zu kennen, wird das schwierig..
ich vermute aber mal, du hast beim "rückgängig machen" irgendwo ein ; eingesetzt, obwohl danach noch was folgt.


chickenfigt1989 - Sa 03.04.10 22:09

Oke die Indy komponenten hab ich jetzt drauf allerdings ein neues Problem.
Wenn ich eine andere Komponente installieren will erscheint immer
[Fatal Error] AccountSystem_Package.dpk(29): Required package 'IndyCore' not found
Lg


Xentar - Sa 03.04.10 22:13

AccountSystemPackage? Klingt nach was eigenem von dir.
Wenn du nun mal den Namen vergleichst, wird dir auffallen, dass das Ding nicht IndyCore, sondern IndyCore70 heißt.


chickenfigt1989 - Sa 03.04.10 22:18

Ja die habe ich mir machen lassen. Aber dankeschön, habe nun überall 70 angehängt und diese Komponente geht auch. Jetzt spinnt nur noch meine Update komponente.
Beim installieren kommt folgendes:
[Warning] Unit 'DECHash' implicitly imported into package 'Update_Package'
[Warning] Unit 'DECData' implicitly imported into package 'Update_Package'
[Warning] Unit 'DECFmt' implicitly imported into package 'Update_Package'
[Warning] Unit 'DECUtil' implicitly imported into package 'Update_Package'
[Warning] Unit 'CRC' implicitly imported into package 'Update_Package'

Cannot load Package 'indy70.' It contains unit 'IdWinsock2,' which is also contained in package IndySystem70

Jetzt hab ich aus der IndySystem70.dpk das Idwinsock2 rausgenommen aber es besteht weiterhin.
Lg


Xentar - Sa 03.04.10 22:23

user profile iconchickenfigt1989 hat folgendes geschrieben Zum zitierten Posting springen:
Cannot load Package 'indy70.' It contains unit 'IdWinsock2,' which is also contained in package IndySystem70

Sieht immer noch so aus, als würde irgendwo die alte Indy 9 verwendet.
Wo genau kann ich dir aber leider nicht sagen. Ich vermute mal, dass dein Update Package noch auf Indy 9 setzt?
Du musst dich schon entscheiden: Entweder ALLE Projekte auf die 10er zu portieren, oder bei der 9er zu bleiben..

Und hör bitte auf, da irgendwelche Sachen aus den Uses zu entfernen ;) Die werden schon ihren Sinn haben.


chickenfigt1989 - Sa 03.04.10 22:57

Ja ich hab se ja wieder hinzugefügt.
Es ist nicht so wie du meinst das einmal Indy 9 benutzt wird und einmal Indy 10
ich habe mir die komponenten machen lassen und es wurde nur Indy 10 benutzt.
Lg


Xentar - Sa 03.04.10 23:09

user profile iconchickenfigt1989 hat folgendes geschrieben Zum zitierten Posting springen:
Es ist nicht so wie du meinst das einmal Indy 9 benutzt wird und einmal Indy 10

Darauf deutet aber der Name "Indy70" hin. Die 70 steht für die Delphi-Versionsnummer, wofür das gedacht ist, also Delphi 7.
Bleibt noch "Indy". Diesen reinen Namen gibt es in Indy 10 nicht mehr - dort heißen sie IndyCore, IndySystem und IndyProtocol.
Also bleib ich bei meiner Meinung, dass du noch irgendwo Überreste der Indy 9 hast :D

Zur Not mal die Dateien löschen / das Verzeichnis umbenennen, sodass diese nicht mehr gefunden werden können.


chickenfigt1989 - Sa 03.04.10 23:17

Weist du wo sich die Indy Dateien befinden?
Will nichts falsches löschn.
Welches Verzeichniss umbenennen?
Lg


Xentar - Sa 03.04.10 23:22

Jetzt wirds schwer, da ich kein D7 zur Hand hab :D
Such mal nach Indy70.dpk Oder einfach nur nach Indy70 als Datei.
Ansonsten musst du wohl warten, ob dir jemand anderes weiterhelfen kann.


chickenfigt1989 - Sa 03.04.10 23:27

Ich habe mal die Suche benutzt von mein Windows und habe aber nur eine Indy70.bpl gefunden unter C:\Program Files\Borland\Delphi7\Bin
Ich lösch die jetzt einfach mal und mach mir davor aber noch ne Sicherungskopie.

Edit:// Nein hat auch nciths gebracht.


Xentar - Sa 03.04.10 23:46

Ähh, volle Fahrt zurück..
Hat nichts damit zu tun, dass es die Datei noch gibt, sondern dass diese anscheinend noch benutzt wird.

Poste mal bitte den Quellcode der Update_Package Projektdatei hier.


chickenfigt1989 - Sa 03.04.10 23:54


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:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
194:
195:
196:
197:
198:
199:
200:
201:
202:
203:
204:
205:
206:
207:
208:
209:
210:
211:
212:
213:
214:
215:
216:
217:
218:
219:
220:
221:
222:
223:
224:
225:
226:
227:
228:
229:
230:
231:
232:
233:
234:
235:
236:
237:
238:
239:
240:
241:
242:
243:
244:
245:
246:
247:
248:
249:
250:
251:
252:
253:
254:
255:
256:
257:
258:
259:
260:
261:
262:
263:
264:
265:
266:
267:
268:
269:
270:
271:
272:
273:
274:
275:
276:
277:
278:
279:
280:
281:
unit UpdateSystem;

interface

uses
  Windows, SysUtils, Classes, IdHTTP, ContNrs, IniFiles, DECFmt, DECHash, Forms;

type
  TUpdateFileList = class;
  TUpdateFile = class;

  TUpdate = class(TComponent)
  private
    FFileListURL: String;
    FFileSpaceURL: String;
  protected
    procedure GetFileList(AFileList: TUpdateFileList);
    procedure DownloadFiles(AFileList: TUpdateFileList);
  public
    function IsNewVersionAvailable(AFileList: TUpdateFileList): Boolean;
    procedure Update;
  published
    property FileListURL: String read FFileListURL write FFileListURL;
    property FileSpaceURL: String read FFileSpaceURL write FFileSpaceURL;
  end;

  TUpdateFileList = class(TObjectList)
  protected
    procedure SetItem(Index: Integer; Value: TUpdateFile);
    function GetItem(Index: Integer): TUpdateFile;
  public
    procedure LoadFromFile(AFileName: String);
    procedure SaveToFile(AFileName: String);
    property Items[Index: Integer]: TUpdateFile read GetItem write SetItem; default;
  end;

  TUpdateFile = class(TPersistent)
  private
    FFileName: String;
    FChecksum: String;
    FUpdated: Boolean;
  public
    property FileName: String read FFileName write FFileName;
    property Checksum: String read FChecksum write FChecksum;
    property Updated: Boolean read FUpdated write FUpdated;
  end;

  procedure Register;
  function IsWindowsAdmin: Boolean;
  function IsFileWriteable(AFileName: String): Boolean;

const
  SECURITY_NT_AUTHORITY: TSIDIdentifierAuthority = (Value: (000005)) ;
  SECURITY_BUILTIN_DOMAIN_RID = $00000020;
  DOMAIN_ALIAS_RID_ADMINS = $00000220;

implementation

procedure Register;
begin
  RegisterComponents('Samples', [TUpdate]);
end;

function IsWindowsAdmin: Boolean;
var
  hAccessToken: THandle;
  ptgGroups: PTokenGroups;
  dwInfoBufferSize: DWORD;
  psidAdministrators: PSID;
  g: Integer;
  bSuccess: BOOL;
begin
  Result := False;

  bSuccess := OpenThreadToken(GetCurrentThread, TOKEN_QUERY, True, hAccessToken) ;
  if not bSuccess then
  begin
    if GetLastError = ERROR_NO_TOKEN then
    bSuccess := OpenProcessToken(GetCurrentProcess, TOKEN_QUERY, hAccessToken) ;
  end;


  if bSuccess then
  begin
    GetMem(ptgGroups, 1024) ;

    bSuccess := GetTokenInformation(hAccessToken, TokenGroups, ptgGroups, 1024, dwInfoBufferSize) ;

    CloseHandle(hAccessToken) ;

    if bSuccess then
    begin
      AllocateAndInitializeSid(SECURITY_NT_AUTHORITY, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 000000, psidAdministrators) ;

      for g := 0 to ptgGroups.GroupCount - 1 do
        if EqualSid(psidAdministrators, ptgGroups.Groups[g].Sid) then
        begin
          Result := True;
          Break;
        end;

      FreeSid(psidAdministrators) ;
    end;

    FreeMem(ptgGroups) ;
  end;
end;

function IsFileWriteable(AFileName: String): Boolean;
var
  hFile: THandle;
begin
  Result := False;

  hFile := CreateFile(PChar(AFileName), GENERIC_WRITE, 0nil, OPEN_EXISTING, 0,0);

  if (hFile = INVALID_HANDLE_VALUE) then
    Result := GetLastError <> ERROR_ACCESS_DENIED
  else
    CloseHandle(hFile);
end;

{ TUpdate }
procedure TUpdate.Update;
var
  Files: TUpdateFileList;
begin
  if not IsFileWriteable(ExtractFilePath(ParamStr(0)) + 'temp.tmp'then
    raise Exception.Create('Sie haben nicht die nötigen Rechte um Dateien zu verändern! Starten Sie das Programm als Administrator.');

  if FileExists(ExtractFilePath(ParamStr(0)) + '_' + ExtractFileName(ParamStr(0))) then
    DeleteFile(ExtractFilePath(ParamStr(0)) + '_' + ExtractFileName(ParamStr(0)));

  Files := TUpdateFileList.Create;
  try
    if IsNewVersionAvailable(Files) then
      DownloadFiles(Files);
  finally
    Files.Free;
  end;
end;

function TUpdate.IsNewVersionAvailable(AFileList: TUpdateFileList): Boolean;
var
  Files: TUpdateFileList;
  iFile: Integer;
begin
  Result := False;

  if Assigned(AFileList) then
    Files := AFileList
  else
    Files := TUpdateFileList.Create;

  if not Assigned(Files) then
    Exit;

  Files.Clear;
  GetFileList(Files);
  for iFile := 0 to Files.Count - 1 do
  begin
    Application.ProcessMessages;
    if (not FileExists(ExtractFilePath(ParamStr(0)) + Files[iFile].FileName)) or
        (AnsiLowerCase(THash_MD5.CalcFile(ExtractFilePath(ParamStr(0)) + Files[iFile].FileName, TFormat_HEX)) <> AnsiLowerCase(Files[iFile].Checksum)) then
    begin
      Files[iFile].Updated := True;
      Result := True;
    end;
  end;

  if (not Assigned(AFileList)) and Assigned(Files) then
    Files.Free;
end;

procedure TUpdate.GetFileList(AFileList: TUpdateFileList);
var
  s: String;
  http: TIdHTTP;
  fs: TFileStream;
begin
  if Assigned(AFileList) then
  begin
    http := TIdHTTP.Create(nil);
    try
      fs := TFileStream.Create(ExtractFilePath(ParamStr(0)) + 'filelist.dat', fmCreate or fmOpenWrite);
      try
        http.Get(FFileListURL, fs);
      finally
        fs.Free;
        AFileList.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'filelist.dat');
      end;
    finally
      http.Free;
    end;
  end;
end;

procedure TUpdate.DownloadFiles(AFileList: TUpdateFileList);
var
  iFile: Integer;
  http: TIdHTTP;
  fs: TFileStream;
begin
  if Assigned(AFileList) then
  begin
    http := TIdHTTP.Create(nil);
    try
      for iFile := 0 to AFileList.Count - 1 do
      begin
        Application.ProcessMessages;
        if AFileList[iFile].Updated then
        begin
          if AnsiLowerCase(AFileList[iFile].FileName) = AnsiLowerCase(ExtractFileName(ParamStr(0))) then
            RenameFile(ParamStr(0), '_' + ExtractFileName(ParamStr(0)));

          fs := TFileStream.Create(ExtractFilePath(ParamStr(0)) + AFileList[iFile].FileName, fmCreate or fmOpenWrite);
          try
            http.Get(FFileSpaceURL + AFileList[iFile].FileName, fs);
          finally
            fs.Free;
          end;
        end;
      end;
    finally
      http.Free;
    end;
  end;
end;

{ TUpdateFileList }
procedure TUpdateFileList.SetItem(Index: Integer; Value: TUpdateFile);
begin
  inherited Items[Index] := Value;
end;

function TUpdateFileList.GetItem(Index: Integer): TUpdateFile;
begin
  Result := inherited Items[Index] as TUpdateFile;
end;

procedure TUpdateFileList.LoadFromFile(AFileName: string);
var
  ini: TMemIniFile;
  iFile: Integer;
  NewFile: TUpdateFile;
begin
  ini := TMemIniFile.Create(AFileName);
  try
    for iFile := 0 to ini.ReadInteger('General''FileCount'0) - 1 do
    begin
      NewFile := TUpdateFile.Create;
      NewFile.FFileName := ini.ReadString('File' + IntToStr(iFile), 'FileName''');
      NewFile.FChecksum := ini.ReadString('File' + IntToStr(iFile), 'Checksum''');
      Add(NewFile);
    end;
  finally
    ini.Free;
  end;
end;

procedure TUpdateFileList.SaveToFile(AFileName: string);
var
  ini: TMemIniFile;
  iFile: Integer;
begin
  ini := TMemIniFile.Create(AFileName);
  try
    ini.Clear;
    ini.WriteInteger('General''FileCount', Count);
    for iFile := 0 to Count - 1 do
    begin
      ini.WriteString('File' + IntToStr(iFile), 'FileName', Items[iFile].FileName);
      ini.WriteString('File' + IntToStr(iFile), 'Checksum', Items[iFile].Checksum);
    end;
    ini.UpdateFile;
  finally
    ini.Free;
  end;
end;

end.



So das is er


Xentar - So 04.04.10 00:19

Hm ne, das ist der Quellcode von der Unit.
Ich meinte eigentlich das Package, was diese Unit einbindet.

http://www.delphi-forum.de/viewtopic.php?p=601300#601300
Diesem Post entnehme ich, dass du versuchst, ein Package namens "Update_Package" zu installieren, das meinte ich.

Btw: Hier der Thread kommt einem Chat-Log ziemlich nahe :D


chickenfigt1989 - So 04.04.10 00:21

Meinst du das hier?

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:
package Update_Package;

{$R *.res}
{$ALIGN 8}
{$ASSERTIONS ON}
{$BOOLEVAL OFF}
{$DEBUGINFO ON}
{$EXTENDEDSYNTAX ON}
{$IMPORTEDDATA ON}
{$IOCHECKS ON}
{$LOCALSYMBOLS ON}
{$LONGSTRINGS ON}
{$OPENSTRINGS ON}
{$OPTIMIZATION ON}
{$OVERFLOWCHECKS OFF}
{$RANGECHECKS OFF}
{$REFERENCEINFO OFF}
{$SAFEDIVIDE OFF}
{$STACKFRAMES OFF}
{$TYPEDADDRESS OFF}
{$VARSTRINGCHECKS ON}
{$WRITEABLECONST OFF}
{$MINENUMSIZE 1}
{$IMAGEBASE $400000}
{$IMPLICITBUILD ON}

requires
  rtl,
  vcl,
  indy;

contains
  UpdateSystem in 'UpdateSystem.pas';

end.


Xentar - So 04.04.10 00:31

Jo.
Und genau hier steht, dass das Paket Indy benötigt (Requires) wird, was wie oben schon angedeutet, auf Version 9 hinweist.
Was passiert, wenn du das durch IndyCore ersetzt, und dann versuchst neu zu kompilieren?


chickenfigt1989 - So 04.04.10 00:37

Lol, mir wurde Versichert das ich für alles Indy 10 brauche.
Habe es nun mit IndyCore ersetzt und neu Compiliert jetz kommt immer folgender Fehler:
[Fatal Error] Update_Package.dpk(30): Required package 'IndyCore' not found
lg

Edit://
Habe jetz IndyCore70 gemacht jetzt kommt aber
[Fatal Error] Update_Package.dpk(33): Unit IdHTTP was compiled with a different version of IdException.EIdException

Heist das die Komponente muss umgeschrieben werden?
lg