Hallo Leute, ich bin auch mal wieder da und hätte ein kleines Problemchen,
also kurz zu dem was ich machen möchte:
ich habe ein kleines Delphi-Porgramm geschrieben, dass sich aus einer Datenbank nach der Reihe verschiedene Verzeichnisse holt, und den Inhalt der Verzeichnise auf einen Stick kopiert (ein kleines Backup-Tool eben.)
Das klappt wie am Schnürchen.
Jetzt wollte ich das Programm so in Windows (Es soll auf W2K und WinXP laufen) einbinden, dass es bei jedem Herunterfahren des Systems ausgeführt wird.
Das gestaltet sich jedoch komplexer als ich dachte, denn selbst wenn man das Betriebssystem dazu überreden kann, das Programm auszuführen, wird dieses zwar gestartet aber Windows wartet leider nicht, bis es wieder beendet wurde, sondern erzwingt einen Programmabbruch mit Fehlermeldung.
Also, habe ich mir gedacht, programmieren wir das Teil halt so, dass es nach dem erfolgreichen Backup die Windows-Eigene "Shutdown-Routine" aufruft. Und genau das ist unter Delphi 5 Enterprise leichter gesagt als getan.
Habe im Netz folgende Funktion gefunden, die auch "fast" das macht, was sie soll:
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:
| function ExitWin(flag:word): Boolean; var vi : TOSVersionInfo; hToken : THandle; tp : TTokenPrivileges; h : DWord;
begin vi.dwOSVersionInfoSize:=SizeOf(vi); GetVersionEx(vi); if vi.dwPlatformId = VER_PLATFORM_WIN32_NT then begin OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,hToken); LookupPrivilegeValue(nil,'SeShutdownPrivilege',tp.Privileges[0].Luid); tp.PrivilegeCount := 1; tp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; h := 0; AdjustTokenPrivileges(hToken,False,tp,0,PTokenPrivileges(nil)^,h); CloseHandle(hToken); result := ExitWindowsEx(flag,0); end else begin result := ExitWindowsEx(flag,0); end; end; |
leider produziert mir diese Funktion ab und zu einen Rundll32-Fehler und fährt meinen PC zwar herunter, aber schaltet diesen nicht ab ("Sie können den Computer jetzt ausschalten")
Das ist nicht ganz das, was ich gerne erreicht hätte.
Bitte HILFE, bzw. Anregungen. Ich tappe z.Zt. wiedermal betriebsblind im Kreis!
DANKE!
Moderiert von
Narses: Code- durch Delphi-Tags ersetzt
Der Mensch wächst mit seinen Aufgaben *** Wer kämpft kann verlieren, wer nicht kämpft hat schon verloren