AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi systemwiederherstellungspunkt setzen
Thema durchsuchen
Ansicht
Themen-Optionen

systemwiederherstellungspunkt setzen

Ein Thema von delphis spassbremse · begonnen am 11. Sep 2006 · letzter Beitrag vom 14. Sep 2006
Antwort Antwort
delphis spassbremse
(Gast)

n/a Beiträge
 
#1

systemwiederherstellungspunkt setzen

  Alt 11. Sep 2006, 20:39
Hallo,

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

MFG

Die Bremse
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: systemwiederherstellungspunkt setzen

  Alt 11. Sep 2006, 21:21
Bei Delphi bestimmt nicht. Aber mit der Windows-API wahrscheinlich. Und ich meine, wir hatten das Thema hier schon mal.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
API

Registriert seit: 18. Apr 2004
637 Beiträge
 
#3

Re: systemwiederherstellungspunkt setzen

  Alt 11. Sep 2006, 21:27
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.dllName '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;
  Mit Zitat antworten Zitat
delphis spassbremse
(Gast)

n/a Beiträge
 
#4

Re: systemwiederherstellungspunkt setzen

  Alt 12. Sep 2006, 06:08
thx
  Mit Zitat antworten Zitat
delphis spassbremse
(Gast)

n/a Beiträge
 
#5

Re: systemwiederherstellungspunkt setzen

  Alt 12. Sep 2006, 13:42
Ehm noch eine frage:

kann man den aktuellen status des forgangs ermitteln?

also ich hab vor noch einen statusbalken mit reinzubauen...
  Mit Zitat antworten Zitat
cruso
(Gast)

n/a Beiträge
 
#6

Re: systemwiederherstellungspunkt setzen

  Alt 13. Sep 2006, 20:13
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!
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

Re: systemwiederherstellungspunkt setzen

  Alt 13. Sep 2006, 21:15
Da man bei SRSetRestorePointA keine Callback Funktion angeben kann, wird diese Funktion wohl keinen Status, wie weit sie ist, zurückgeben.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Mackhack
Mackhack

Registriert seit: 29. Nov 2003
Ort: San Diego, CA/USA
1.446 Beiträge
 
Delphi 2006 Architect
 
#8

Re: systemwiederherstellungspunkt setzen

  Alt 14. Sep 2006, 00:03
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!
Um etwas Neues zu schaffen muss man seine Ohren vor den Nein-sagern verschliessen um seinen Geist öffnen zu können.
(George Lukas)
  Mit Zitat antworten Zitat
Benutzerbild von Stefan Hueg
Stefan Hueg

Registriert seit: 13. Jun 2004
Ort: Gießen
187 Beiträge
 
Delphi 2006 Professional
 
#9

Re: systemwiederherstellungspunkt setzen

  Alt 14. Sep 2006, 00:49
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...

Muss das sein?
Stefan Hueg
  Mit Zitat antworten Zitat
Benutzerbild von Mackhack
Mackhack

Registriert seit: 29. Nov 2003
Ort: San Diego, CA/USA
1.446 Beiträge
 
Delphi 2006 Architect
 
#10

Re: systemwiederherstellungspunkt setzen

  Alt 14. Sep 2006, 07:18
Zitat von Stefan Hueg:
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...

Muss das sein?
Das half mir aber bei meiner Frage genauso wenig! Kann mir trotzdem vlt. noch jemand dazu helfen bitte?
Um etwas Neues zu schaffen muss man seine Ohren vor den Nein-sagern verschliessen um seinen Geist öffnen zu können.
(George Lukas)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:46 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