Registriert seit: 29. Nov 2003
Ort: San Diego, CA/USA
1.446 Beiträge
Delphi 2006 Architect
|
Re: MOVEFILE_DELAY_UNTIL_REBOOT: Ins löschen einklinken
12. Apr 2007, 03:23
Hallo DPler,
ich komme hier einfach nicht weiter.
Der Code gibt mir immer ein Access is Denied aus. Ich habe 8 Files hier auf einer 2. Platte die aus einer alten Windows Installation her stammen die ich gerne loeschen wuerde mit dem Tool. Jedoch wird nichts in die Registry geschrieben damit Windows die Files loeschen koennte.
Delphi-Quellcode:
procedure TfoMain.BtnGoClick(Sender: TObject);
var
Errors, I: Integer;
FileName, S: String;
PrevState: Boolean;
Priv: DWORD;
begin
MemInfo.Lines.Clear;
MemInfo.Lines.Add('Now storing information for file deleting at next systemstart'#13#10);
Errors := 0;
PBarDeletion.Max := LvwFiles.Items.Count;
for I := 0 to LvwFiles.Items.Count - 1 do
begin
PBarDeletion.Position := I + 1;
FileName := LvwFiles.Items[I].Caption;
if ( not MoveFileEx(PChar(FileName), Nil, MOVEFILE_DELAY_UNTIL_REBOOT) ) then
begin
MemInfo.Lines.Add(LvwFiles.Items[I].Caption + ': ' + SysErrorMessage(GetLastError));
Inc(Errors, 1);
end;
end;
S := #13#10'Finished';
Case Errors of
0: ;
1: AppendStr(S, ', ' + IntTostr(Errors) + ' Error');
else
AppendStr(s, ', ' + IntTostr(Errors) + ' Errors');
end;
MemInfo.Lines.Add(S);
Priv := EnablePrivilege('SeShutDownPrivilege', True, PrevState);
if ( Priv <> 0 ) then
begin
ShowMessage('Du hast nicht die Rechte, den PC neu zu starten');
Exit;
end;
if ( MessageDlg('Do you want to reboot your machine now?', mtConfirmation, [mbYes, mbNo], 0) = mrYes ) then
begin
if ( not ExitWindowsEx(EWX_REBOOT or EWX_FORCEIFHUNG, 0) ) then
begin
ShowMessage(SysErrorMessage(GetLastError));
end
else
begin
EnablePrivilege('SeShutDownPrivilege', PrevState, PrevState);
end;
end;
end;
Um etwas Neues zu schaffen muss man seine Ohren vor den Nein-sagern verschliessen um seinen Geist öffnen zu können.
(George Lukas)
|
|
Zitat
|