Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Kopieren wenn Windows beendet wird (https://www.delphipraxis.net/77373-kopieren-wenn-windows-beendet-wird.html)

Helmi 18. Sep 2006 19:22


Kopieren wenn Windows beendet wird
 
Hallo,

zum abfragen, ob Windows beendet wird verwend ich diesen Code:
Delphi-Quellcode:
procedure TMainForm.WMQueryEndSession(var Msg: TWMQueryEndSession);
begin
  //Windows erlauben zu beenden
  Msg.Result := 1;

  //Wenn Windows beendet wird, dann Variable auf true setzen
  Windows_Session_End := true;

  //Programm schliessen
  close;

  inherited;
end;
Nun würd ich gerne, wenn Win beendet wird, noch mit ShellApi eine Datei kopieren und erst wenn diese fertig ist, Windows beenden lassen.

Kopieren tu ich mit:
Delphi-Quellcode:
function ShellFileOperation(Quelle: string; Ziel: string; Flags: Integer): Boolean;
var
  shellinfo: TSHFileOpStructA;
begin
  with shellinfo do
    begin
      wnd  := Application.Handle;
      wFunc := Flags;
      pFrom := PChar(Quelle);
      pTo  := PChar(Ziel);
    end;

  Result := SHFileOperation(shellinfo) = 0;
end;
Wenn ich nun die kopierfunction in die obere procedure einbinde, dann bekomm ich eine Fehlermeldung, dass die datei nicht kopiert werden konnte, oder der Datenträger nicht mehr vorhanden sei.

Wie kann ich es machen, dass beim Win-Beenden noch kopiert wird?

mkinzler 18. Sep 2006 19:31

Re: Kopieren wenn Windows beendet wird
 
Wenn der Computer in einer Domäne eingebunden ist kannst du auch Skripte bei der Abmeldung ausführen lassen.

Helmi 18. Sep 2006 19:32

Re: Kopieren wenn Windows beendet wird
 
Zitat:

Zitat von mkinzler
Wenn der Computer in einer Domäne eingebunden ist kannst du auch Skripte bei der Abmeldung ausführen lassen.

nein das ist er nicht!

dies soll nur in meinem programm geschehen

Zacherl 18. Sep 2006 20:01

Re: Kopieren wenn Windows beendet wird
 
Delphi-Quellcode:
procedure TMainForm.WMQueryEndSession(var Msg: TWMQueryEndSession);
begin
  //Windows erlauben zu beenden
  Msg.Result := Integer(false);

  //Kopieren
 
  Msg.Result := Integer(true);

  //Wenn Windows beendet wird, dann Variable auf true setzen
  Windows_Session_End := true;

  //Programm schliessen
  close;

  inherited;
end;
Florian

Vjay 18. Sep 2006 21:03

Re: Kopieren wenn Windows beendet wird
 
Zitat:

//Windows erlauben zu beenden
Msg.Result := Integer(false);

//Kopieren

Msg.Result := Integer(true);
Was soll das denn bringen=

Zacherl 18. Sep 2006 21:08

Re: Kopieren wenn Windows beendet wird
 
Das Herunterfahren pausieren, die Daten kopieren, Herunterfahren fortsetzen :wink:
Kann sein, dass es unnötig ist, das Result erst auf false zu setzen, aber den Kopiervorgang sollte man auf jeden Fall im MessageHandler durchführen ...

Vjay 18. Sep 2006 21:31

Re: Kopieren wenn Windows beendet wird
 
Das hin und her-setzen ist auf jeden Fall unnötig, da Windows das Result erst beim Verlassen deines Eventhandlers zugespielt wird.

Als ein Problem könnte sich allerdings der Shutdown-Timeout herausstellen. Wenn der Kopiervorgang zu lange dauert, könnte es passieren, dass Windows deine Anwendung "abschießt".

PS. würde ich versuchen mit copyFile zu arbeiten. Denn diese Funktion funktionieret ( :-D ) auf jeden Fall. Bei der shFileOperation wäre ich mir während des Herunterfahrens alles andere als sicher.

c113plpbr 18. Sep 2006 21:42

Re: Kopieren wenn Windows beendet wird
 
Du könntest die Dateien auch beim Systemstart *verschieben* lassen, falls sie nicht zwingend beim Herunterfahren kopiert werden muss (ich weiß ja ned was du vor hast), siehe dazu MSDN-Library durchsuchenMoveFileEx (vielleicht kann man das ganze ja klug gestalten, und die Datei vorher kopieren, oder so ... ^^ is ja nur ne Idee).

ciao, Philipp

zer00 18. Sep 2006 22:40

Re: Kopieren wenn Windows beendet wird
 
Zitat:

Zitat von mkinzler
Wenn der Computer in einer Domäne eingebunden ist kannst du auch Skripte bei der Abmeldung ausführen lassen.

Das geht per lokaler Gruppenrichtlinie auch ohne eine Domäne.
Start/Ausführen gpedit.msc.

Sorry ist ein wenig OT. ;)
grz zer00


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:45 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz