Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi systemwiederherstellungspunkt setzen (https://www.delphipraxis.net/76903-systemwiederherstellungspunkt-setzen.html)

delphis spassbremse 11. Sep 2006 20:39


systemwiederherstellungspunkt setzen
 
Hallo,

ich wollte mal fragen, ob es bei delphi eine funktion gibt, einen
wiederherstellungspunkt zu setzen (wie bei manchen installionen)

MFG

Die Bremse

Luckie 11. Sep 2006 21:21

Re: systemwiederherstellungspunkt setzen
 
Bei Delphi bestimmt nicht. Aber mit der Windows-API wahrscheinlich. Und ich meine, wir hatten das Thema hier schon mal.

API 11. Sep 2006 21:27

Re: systemwiederherstellungspunkt setzen
 
Ich hab vor langer Zeit mal dies geschrieben:

1. Methode: Mit dem Microsoft Scripting Control:

Zitat:

Wenn du das Microsoft Scripting Control noch nicht installiert hast
(Komponente TScriptControl), dann kannst du hier runterladen:
http://www.msdn.microsoft.com/scripting/

Nach dem Herunterladen und der Installation wähle in der Delphi IDE unter dem
Menü "Komponente" den Menüpunkt "ActiveX importieren".
Dann in der Listbox "Microsoft Script Control 1.0" auswählen und "Installieren..."
anklicken.
Nun sollte die TScriptControl Komponente unter dem ActiveX Register zu finden sein.
Platziere nun eine TScriptControl Komponente und einen TButton auf einer Form und
schreibe im OnClick Ereignis des Buttons den folgenden Code:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  sr: OLEVAriant;
begin
  ScriptControl1.Language := 'VBScript';
  sr := ScriptControl1.Eval('getobject("winmgmts:\\.\root\default:Systemrestore")');
  if sr.CreateRestorePoint('Automatic Restore Point', 0, 100) = 0 then
    ShowMessage('New Restore Point successfully created.')
    // Wiederherstellungspunkt erfolgreich erstellt
  else
    ShowMessage('Restore Point creation Failed!');
    // Wiederherstellungspunkt Erstellung fehlgeschlagen.
end;



2. Methode: Mit SRSetRestorePoint API from SrClient.dll:

Delphi-Quellcode:
// Translation from SRRestorePtAPI.h
const
 // Type of Event
 BEGIN_SYSTEM_CHANGE = 100;
 END_SYSTEM_CHANGE = 101;
 // Type of Restore Points
 APPLICATION_INSTALL = 0;
 CANCELLED_OPERATION = 13;
 MAX_DESC = 64;
 MIN_EVENT = 100;

// Restore point information
type
PRESTOREPTINFOA = ^_RESTOREPTINFOA;
_RESTOREPTINFOA = packed record
    dwEventType: DWORD; // Type of Event - Begin or End
    dwRestorePtType: DWORD; // Type of Restore Point - App install/uninstall
    llSequenceNumber: INT64; // Sequence Number - 0 for begin
    szDescription: array [0..MAX_DESC] of CHAR; // Description - Name of Application / Operation
end;
RESTOREPOINTINFO = _RESTOREPTINFOA;
PRESTOREPOINTINFOA = ^_RESTOREPTINFOA;

// Status returned by System Restore

PSMGRSTATUS = ^_SMGRSTATUS;
_SMGRSTATUS = packed record
    nStatus: DWORD; // Status returned by State Manager Process
    llSequenceNumber: INT64; // Sequence Number for the restore point
end;
STATEMGRSTATUS = _SMGRSTATUS;
PSTATEMGRSTATUS = ^_SMGRSTATUS;

function SRSetRestorePointA(pRestorePtSpec: PRESTOREPOINTINFOA; pSMgrStatus: PSTATEMGRSTATUS): Bool;
  stdcall; external 'SrClient.dll' Name 'SRSetRestorePointA';

// Example how to create and cancel a previous restore point.
// Ref: [url]http://tinyurl.com/78pv[/url]

procedure TForm1.Button1Click(Sender: TObject);
const
 CR = #13#10;
var
  RestorePtSpec: RESTOREPOINTINFO;
  SMgrStatus: STATEMGRSTATUS;
begin
  // Initialize the RESTOREPOINTINFO structure
  RestorePtSpec.dwEventType := BEGIN_SYSTEM_CHANGE;
  RestorePtSpec.dwRestorePtType := APPLICATION_INSTALL;
  RestorePtSpec.llSequenceNumber := 0;
  RestorePtSpec.szDescription := 'SAMPLE RESTORE POINT';

  if (SRSetRestorePointA(@RestorePtSpec, @SMgrStatus)) then
  begin
    ShowMessage('Restore point set. Restore point data:' + CR+
      'Sequence Number: ' + Format('%d', [SMgrStatus.llSequenceNumber]) + CR+
      'Status: ' + Format('%u', [SMgrStatus.nStatus]));

      // Restore Point Spec to cancel the previous restore point.
      RestorePtSpec.dwEventType := END_SYSTEM_CHANGE;
      RestorePtSpec.dwRestorePtType := CANCELLED_OPERATION;
      RestorePtSpec.llSequenceNumber := SMgrStatus.llSequenceNumber;

      // This is the sequence number returned by the previous call.
      // Canceling the previous restore point
      if (SRSetRestorePointA(@RestorePtSpec, @SMgrStatus)) then
        ShowMessage('Restore point canceled. Restore point data:' + CR+
        'Sequence Number: ' + Format('%d', [SMgrStatus.llSequenceNumber]) + CR+
        'Status: ' + Format('%u', [SMgrStatus.nStatus]))

      else
        ShowMessage('Couldn''t cancel restore point.');
    end
    else
      ShowMessage('Couldn''t set restore point.');
  end;
end;

delphis spassbremse 12. Sep 2006 06:08

Re: systemwiederherstellungspunkt setzen
 
thx

delphis spassbremse 12. Sep 2006 13:42

Re: systemwiederherstellungspunkt setzen
 
Ehm noch eine frage:

kann man den aktuellen status des forgangs ermitteln?

also ich hab vor noch einen statusbalken mit reinzubauen...

cruso 13. Sep 2006 20:13

Re: systemwiederherstellungspunkt setzen
 
Zitat:

Zitat von delphis spassbremse
Ehm noch eine frage:

kann man den aktuellen status des forgangs ermitteln?

also ich hab vor noch einen statusbalken mit reinzubauen...


Das würde mich auch mal interessieren!

Luckie 13. Sep 2006 21:15

Re: systemwiederherstellungspunkt setzen
 
Da man bei SRSetRestorePointA keine Callback Funktion angeben kann, wird diese Funktion wohl keinen Status, wie weit sie ist, zurückgeben.

Mackhack 14. Sep 2006 00:03

Re: systemwiederherstellungspunkt setzen
 
Hi,

kann mir mal jemand erklaeren wozu diese Zeilen dienen? Wuerde ich im allgemeinen gerne verstehen um es beim naechsten mal selbst zu machen.

Delphi-Quellcode:
type
PRESTOREPTINFOA = ^_RESTOREPTINFOA;
_RESTOREPTINFOA = packed record
Und dann hier nochmal aber irgendwie anders aussehend:

Delphi-Quellcode:
RESTOREPOINTINFO = _RESTOREPTINFOA;
PRESTOREPOINTINFOA = ^_RESTOREPTINFOA;
Ich verstehe das einfach nicht wirklich und wuerde es aber gerne verstehen.

Danke!

Stefan Hueg 14. Sep 2006 00:49

Re: systemwiederherstellungspunkt setzen
 
Zitat:

Zitat von Luckie
Bei Delphi bestimmt nicht. Aber mit der Windows-API wahrscheinlich. Und ich meine, wir hatten das Thema hier schon mal.

Ich möchte mit dir nicht aneinander prasseln, aber mir fällt so langsam mal auf dass viele deiner Kommentare nichtssagend sind, das Thema nicht weiterbringen oder überhaupt keine Hilfestellung geben... :kotz:

Muss das sein?

Mackhack 14. Sep 2006 07:18

Re: systemwiederherstellungspunkt setzen
 
Zitat:

Zitat von Stefan Hueg
Zitat:

Zitat von Luckie
Bei Delphi bestimmt nicht. Aber mit der Windows-API wahrscheinlich. Und ich meine, wir hatten das Thema hier schon mal.

Ich möchte mit dir nicht aneinander prasseln, aber mir fällt so langsam mal auf dass viele deiner Kommentare nichtssagend sind, das Thema nicht weiterbringen oder überhaupt keine Hilfestellung geben... :kotz:

Muss das sein?

Das half mir aber bei meiner Frage genauso wenig! Kann mir trotzdem vlt. noch jemand dazu helfen bitte?


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:24 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