![]() |
Firewall bringt Programm zum Absturz
Hallo zusammen,
ich habe folgendes Problem: Ich habe eine Anwendeung, die eine dll benutzt. Die dll kopiert Dateien von A nach B. Auf dem Rechner ist Panda Platinum installiert. 1) Ist die Firewall aktiv und es wird auf ein Netzlaufwerk kopiert -> Kompletter absturz 2) Ist die Firewall deaktiviert und es wird auf ein Netzlaufwerk kopiert -> kein Problem 3) Wird lokal kopiert klappt es immer mit oder ohne Firewall! Ich habe schon versucht die Dll und die Exe bei Panda Platinum in der Firewall einzutragen -> Keine veränderung!! Was könnte der grund für abstürze sein?? zu grosse Datenmengen ?? Bitte um hilfe |
Re: Firewall bringt Programm zum Absturz
Zitat:
Zitat:
Wie du dem Bären eine korekte Rule für deine DLL bzw. App beibringen kannst weiß ich nicht, aber dazu wird sicherlich etwas in der Bärenhilfe stehen. Wieso benutzt du zum kopieren eigendlich nicht CopyFile? Das kommt zwar auch nicht durch eine Firewall durch, aber wenigstens stürzt ein Programm nicht ab. Eine Prüfung ob der Zielpfad überhaupt erreichbar und ob du dort Schreibrechte hast wären auch angebracht. |
Re: Firewall bringt Programm zum Absturz
Na ja,
so ganz kann diese Antwort nicht stimmen, denn meine CopyDll kann ein paar Dateien kopieren, erst bei grösseren Dateien stürtz das Prog in Verbindung mit der Firewall ab! Ich benutze eine CopyDll, weil diese natürlich noch mehr beinhaltet als den Copy-Befehl. Bin für weitere Tipps dankbar. |
Re: Firewall bringt Programm zum Absturz
Hast du den Quellcode der DLL? Ansonsten kann man hier nur weiter raten an was es liegt.
|
Re: Firewall bringt Programm zum Absturz
Ok,
vielleicht liegt es darna, dass ich ein
Delphi-Quellcode:
benutze als eine ActivX Server bzw. COM Objekt benutze.
TCopyObj = class(TAutoObject, ICopy)
hier kommt die eigentliche kopierroutine:
Delphi-Quellcode:
procedure CopyFile(sFrom, sTo: String; tlSrcFile, tlDestFile, tlSize: TLabel; bSecurityRename: Boolean;
pbFile: TProgressBar;var iError: Byte;var sMsg: ShortString; iFileSize: Int64; lpWrite: TFileTime; bSetAccess: Boolean); const cInternExtension = '.sync'; var iAttr: Integer; fFrom, fTo: File; Buf: array[1..8191] of Char; gel, ges: Integer; hDest, iSep: Integer; iPos: Int64; sOrg_To: String; //------------------------------------------- procedure SetAttribute(sFile: String); begin if iAttr<>-1 then FileSetAttr(sFile,iAttr); end; //------------------------------------------- begin iError:=1; sMsg:=msgFileCopied; // Datei-Infos setzen SetTextToLabel(tlSrcFile,sFrom); SetTextToLabel(tlDestFile,sTo); SetSizeToLabel(tlSize,iFileSize,pbFile.Left+pbFile.Width); pbFile.Position:=0; iSep:=1; while (iFileSize div iSep) > High(Integer)do iSep:=iSep*10; pbFile.Max:=iFileSize div iSep; Application.ProcessMessages; // Dateiattribute ermitteln iAttr:=FileGetAttr(sFrom); sOrg_To:=sTo; if FileExists(sTo)then begin // Attribut auf 0 setzen FileSetAttr(sTo,0); // Umbennennen der Zieldatei if not bSecurityRename then bSecurityRename:=ExpandUNCFileName(sTo)[1]='\'; if(bSecurityRename)then begin sTo:=sTo+cInternExtension; if FileExists(sTo)then DeleteFile(sTo); if(not RenameFile(sOrg_To,sTo))then begin sMsg:=ermRenameFileForCopy; iError:=2; exit; end; end; end else if bSecurityRename then sTo:=sTo+cInternExtension; //FileSetAttr(sFrom,0); // Öffnen der Quelldatei try AssignFile(fFrom,sFrom); FileMode:=0; Reset(fFrom,1); except on e: EInOutError do begin sMsg:=ermOpenSrc+SysErrorMessage(e.ErrorCode); iError:=2; exit; end; end; // Öffnen der Zieldatei try AssignFile(fTo,sTo); Rewrite(fTo,1); except on e: EInOutError do begin CloseFile(fFrom); SetAttribute(sFrom); sMsg:=ermOpenDest+SysErrorMessage(e.ErrorCode); iError:=2; exit; end; end; // Kopieren der Datei iPos:=0; repeat try BlockRead(fFrom,Buf,SizeOf(buf),gel); BlockWrite(fTo,buf,gel,ges); inc(iPos,gel); pbFile.Position:=iPos div iSep; Application.ProcessMessages; except on e: EInOutError do begin iError:=2; sMsg:=SysErrorMessage(e.ErrorCode); CloseFile(fFrom); CloseFile(fTo); DeleteFile(sTo); if FileExists(sTo)then iError:=3; SetAttribute(sFrom); exit; end; end; if FCopyAbort then begin CloseFile(fFrom); CloseFile(fTo); DeleteFile(sTo); if FileExists(sTo)then iError:=3; tfCopy.SetAbort; exit; end; until(gel<>ges)or(gel=0); if gel<>ges then begin iError:=2; sMsg:=ermWriteError; CloseFile(fFrom); CloseFile(fTo); DeleteFile(sTo); if FileExists(sTo)then iError:=3; SetAttribute(sFrom); exit; end; // Dateien schliessen CloseFile(fFrom); CloseFile(fTo); // Setzen des Zeitstempels hDest:=FileOpen(sTo,fmOpenWrite); if not SetFileTime(hDest,nil,nil,@lpWrite) then begin iError:=2; sMsg:=SysErrorMessage(GetLastError); SetFileTime(hDest,nil,nil,0); FileClose(hDest); DeleteFile(sTo); if FileExists(sTo)then iError:=3; exit; end; FileClose(hDest); // Kopie zurückbenennen if bSecurityRename then begin if not RenameFile(sTo,sOrg_To)then begin sMsg:=ermReRename; iError:=2; exit; end; end; sTo:=sOrg_To; // Setzen der Attribute if FileSetAttr(sTo,iAttr)>0 then begin iError:=2; sMsg:=ermSetAttrib+SysErrorMessage(GetLastError); end; // Setzen der NTFS Access Attribute if bSetAccess then begin try SetDACL(PChar(sFrom),PChar(sTo)); except // Fehler unbehandelt end; try SetSACL(PChar(sFrom),PChar(sTo)); except // Fehler unbehandelt end; try SetOwner(PChar(sFrom),PChar(sTo)); except // Fehler unbehandelt end; end;// if bSetAccess end; |
Re: Firewall bringt Programm zum Absturz
Aso, dass du kleinere Dateien kopiert hast du im ersten Post nicht verraten.
Aber ich glaube dennoch das die Firewall schuld ist. Nämlich: Vor einiger Zeit kam ein Kumpel bei mir vorbei und brachte seine neuen "Urlaubsvideos" mit. Die wollten wir natürlich kopieren und zwar mit dem ganz normalen Explorer. Einige kleinere Datein liesen sich kopieren, aber bei Größeren war plötzlich Schluß. Danach war mit dem Explorer auch kein Zugriff mehr auf den Zielrechner bzw. Freigabe mehr möglich "Zugriff verweigert". Erst nach einem Reboot und dem Abschalten der XP-Firewall liesen sich auch 100 MB-Dateien ohne Probleme kopieren. Vlt. hast du auch die XP-interne-Firewall aktiviert? Wie AssignFile und BlockWrite intern auf Netzwerkebene funktionieren weiß leider ich nicht. Aber evtl. hilft dir dieser *PUSH* und Andere können dir weiter helfen. Sorry gmc |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:08 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