Erstellen eines Datenträgerbereinigungshandlers

Ein Axiom, das sich in der Welt der Computer immer wieder bewährt hat, ist, dass Sie es unabhängig von der Größe der Speicherkapazität Ihres Computers schließlich auffüllen werden. Während die durchschnittliche Größe der Festplatte eines Computers im Laufe der Zeit dramatisch zugenommen hat, sind die Anwendungen entsprechend gewachsen, sodass Benutzer nach Möglichkeiten suchen, mehr freien Festplattenspeicher zu schaffen. Der verfügbare Speicherplatz wird auch durch die vielen temporären Dateien reduziert, die Anwendungen aus Sicherungs- oder Leistungsgründen erstellen. Wenn der Speicherplatz knapp wird, muss der von Anwendungen belegte Speicherplatz verringert werden. Speicherplatz kann mit verschiedenen Mitteln freigegeben werden, einschließlich der folgenden:

  • Dateien werden gelöscht.
  • Komprimieren von Dateien.
  • Verschieben von Dateien auf ein Sicherungsmedium.
  • Übertragen von Dateien auf einen Remoteserver.

Zu den Dateien, die für die Bereinigung geeignet sind, gehören:

  • Dateien, die der Benutzer nie wieder benötigt.
  • Temporäre Dateien, die nur aus Leistungsgründen vorhanden sind.
  • Dateien, die bei Bedarf von einer Installations-CD wiederhergestellt werden können.
  • Datendateien, die möglicherweise durch neuere Versionen ersetzt wurden, z. B. alte Sicherungsdateien.
  • Ältere Dateien, die seit langem nicht mehr verwendet wurden.

Das Löschen eignet sich besonders für Dateien, die der Benutzer nie wieder benötigt, z. B. Dateien, die aus Leistungsgründen vorübergehend zwischengespeichert werden. Das Löschen eignet sich auch für Dateien, die leicht wiederhergestellt werden können, z. B. Grafikdateien, die von einer Installations-CD neu geladen werden können. Dateien, die der Benutzer möglicherweise später benötigt oder die schwer zu rekonstruieren sind, sind bessere Kandidaten für die Komprimierung oder Sicherung.

Zu erwarten, dass ein Benutzer das Dateisystem manuell sauber, ist keine gute Lösung. Der Benutzer weiß möglicherweise nicht, wo sich viele der Dateien befinden oder wie er erkennt, welche Dateien sicher entfernt werden können. Darüber hinaus besteht das Risiko, dass der Benutzer wichtige Dateien löschen könnte.

Die folgenden Facetten des Datenträgerbereinigungsprogramms werden in diesem Thema erläutert.

Das Windows Disk Cleanup-Hilfsprogramm

Ab Windows 98 umfasst das Windows-Betriebssystem die Datenträgerbereinigung, ein Hilfsprogramm, das dem Benutzer die Verwaltung des verfügbaren Festplattenspeichers erheblich erleichtert. Das Dienstprogramm "Datenträgerbereinigung" wurde entwickelt, um so viel Speicherplatz wie möglich freizugeben und das Risiko zu verringern, dass der Benutzer wichtige Dateien versehentlich löscht.

Die Datenträgerbereinigung kann auf drei Arten initiiert werden.

  • Der Benutzer kann die Datenträgerbereinigung initiieren, indem er auf Start klickt. Verweisen auf Alle Programme, Zubehör und Systemtools; und klicken Sie dann auf Datenträgerbereinigung.
  • Das System benachrichtigt den Benutzer mit einem Meldungsfeld, dass nicht genutzter Speicherplatz den kritischen Modus erreicht hat. Der Schwellenwert für den kritischen Modus für ein Laufwerk, das größer als 2,25 GB ist, beträgt 200 Megabyte (MB). Nachfolgende Warnungen werden mit 80, 50 und 1 MB ausgegeben. Der Benutzer hat die Möglichkeit, Speicherplatz manuell frei zu geben oder das Hilfsprogramm "Datenträgerbereinigung" zu starten.
  • Der Benutzer kann den Windows-Assistenten für geplante Aufgaben (der auf älteren Systemen als Wartungs-Assistent bezeichnet wird) das Hilfsprogramm datenträgerbereinigung automatisch zu geplanten Zeiten ausführen lassen.

Die grundlegende Herausforderung bei der Datenträgerbereinigung besteht darin, so viel Speicherplatz wie möglich frei zu geben, ohne wichtige Dateien zu löschen. Da es keine Standardmethode zum Markieren von Dateien für die Bereinigung gibt, kann keine einzelne Anwendung alle unwesentlichen Dateien zuverlässig erkennen und sauber. Das Dienstprogramm Datenträgerbereinigung löst dieses Problem, indem der Bereinigungsvorgang zwischen einem einzelnen Datenträgerbereinigungs-Manager und einer Sammlung von Datenträgerbereinigungshandlern aufgeteilt wird.

Wenn das Hilfsprogramm "Datenträgerbereinigung" ausgeführt wird, wird dem Benutzer das folgende Dialogfeld angezeigt. (Wenn auf dem Computer mehrere Datenträger oder Datenträgerpartitionen vorhanden sind, wird der Benutzer zuerst aufgefordert, ein Laufwerk auszuwählen, bevor dieses Dialogfeld angezeigt wird.)

Screenshot des Dialogfelds

Der Datenträgerbereinigungs-Manager ist Teil des Betriebssystems. Es zeigt das Dialogfeld in der vorherigen Abbildung an, verarbeitet Benutzereingaben und verwaltet den Bereinigungsvorgang. Die tatsächliche Auswahl und Bereinigung nicht benötigter Dateien erfolgt durch die einzelnen Datenträgerbereinigungshandler, die im Listenfeld des Datenträgerbereinigungs-Managers angezeigt werden. Der Benutzer hat die Möglichkeit, einzelne Handler zu aktivieren oder zu deaktivieren, indem er deren Kontrollkästchen auf der Benutzeroberfläche des Datenträgerbereinigungs-Managers aktiviert oder deaktiviert.

Jeder Handler ist für einen klar definierten Satz von Dateien verantwortlich. Beispielsweise ist der ausgewählte Handler in der Abbildung für das Bereinigen heruntergeladener Programmdateien verantwortlich. Der in der Abbildung ausgewählte Handler bietet auch eine Schaltfläche Dateien anzeigen . Durch Klicken auf die Schaltfläche kann der Benutzer anfordern, dass der Handler eine Benutzeroberfläche in der Regel ein Windows Explorer Fenster anzeigt, in dem der Benutzer angeben kann, welche Dateien oder Klassen von Dateien sauber.

Obwohl Windows mit einer Reihe von Datenträgerbereinigungshandlern ausgestattet ist, sind sie nicht für die Verarbeitung von Dateien konzipiert, die von anderen Anwendungen erstellt wurden. Stattdessen ist der Datenträgerbereinigungs-Manager so konzipiert, dass er flexibel und erweiterbar ist, indem er jedem Entwickler ermöglicht, seinen eigenen Datenträgerbereinigungshandler zu implementieren und zu registrieren. Jeder Entwickler kann die verfügbaren Datenträgerbereinigungsdienste erweitern, indem er einen Datenträgerbereinigungshandler implementiert und registriert.

Alle Anwendungen, die temporäre Dateien erzeugen, können und sollten einen Datenträgerbereinigungshandler implementieren und registrieren. Dadurch erhalten Benutzer eine bequeme und zuverlässige Möglichkeit, die temporären Dateien der Anwendung zu verwalten. Wenn Sie den Handler implementieren, können Sie entscheiden, welche Dateien betroffen sind, und bestimmen, wie die tatsächliche Bereinigung erfolgt.

Implementierungsgrundlagen

Bereinigungshandler sind prozessinterne COM-Objekte (Component Object Model) des Servers. Windows stellt ein vorhandenes Handlerobjekt namens DataDrivenCleaner für Ihre Verwendung bereit. Sie können einen Handler auch selbst implementieren, um mehr Flexibilität zu erzielen. Mit diesen Objekten können Sie dann angeben, wie Sie Dateien auswählen, Speicherplatz freigeben und im Fall eines implementierten Handlers die optionale Benutzeroberfläche für eine präzisere Steuerung anzeigen. In diesem Abschnitt wird die Implementierung eines eigenen Handlers behandelt. Ausführliche Informationen zur Verwendung des DataDrivenCleaner-Objekts finden Sie unter Verwenden des DataDrivenCleaner-Objekts.

Ein Datenträgerbereinigungshandler sollte diese fünf grundlegenden Aufgaben ausführen.

  • Initialisieren Sie das Handlerobjekt.
  • Überprüfen Sie den Datenträger, um zu ermitteln, wie viel Speicherplatz freigegeben werden kann.
  • Zeigen Sie die Benutzeroberfläche an, um Benutzerfeedback zu erhalten, welche Dateien sauber. (Optional)
  • Führen Sie die Bereinigung durch.
  • Herunterfahren.

Damit der Datenträgerbereinigungs-Manager diese Aufgaben verwalten kann, muss ein Handler entweder IEmptyVolumeCache für Windows 98 oder IEmptyVolumeCache2 für Windows Millennium Edition (Windows Me), Windows 2000 und Windows XP exportieren. Da IEmptyVolumeCache2 von IEmptyVolumeCache erbt und nur die zusätzliche Methode InitializeEx hinzugefügt wird, ist relativ wenig zusätzlicher Aufwand erforderlich, um beides zu implementieren. Sofern Ihr Handler nicht nur für eines dieser Betriebssysteme vorgesehen ist, sollten beide Schnittstellen exportiert werden.

Zum Exportieren dieser Schnittstellen müssen Sie diese Methoden implementieren, die den fünf grundlegenden Aufgaben entsprechen.

Initialize/InitializeEx

Die beiden Initialisierungsmethoden, die recht ähnlich sind, werden aufgerufen, wenn das Hilfsprogramm Datenträgerbereinigung ausgeführt wird. Der Windows 98-Datenträgerbereinigungs-Manager ruft die IEmptyVolumeCache::Initialize-Methode eines Handlers auf. Der Datenträgerbereinigungs-Manager von Windows Millennium Edition (Windows Me), Windows 2000 oder Windows XP versucht jedoch zunächst, IEmptyVolumeCache2::InitializeEx aufzurufen und verwendet nur IEmptyVolumeCache::Initialize , wenn IEmptyVolumeCache2 nicht vom Handler verfügbar gemacht wird. Der Datenträgerbereinigungs-Manager übergibt Informationen an die -Methode, z. B. den Registrierungsschlüssel des Handlers und das Datenträgervolume, das zu bereinigen ist.

Beide Methoden können verschiedene Anzeigezeichenfolgen zurückgeben und ein oder mehrere Flags festlegen. Der Hauptunterschied zwischen den beiden Methoden besteht darin, wie der im Datenträgerbereinigungs-Manager angezeigte Text behandelt wird. Die folgenden drei Zeichenfolgen sind betroffen.

String Zweck Initialize InitializeEx
Anzeigename Der Name des Handlers, der im Listenfeld des Datenträgerbereinigungs-Managers angezeigt wird. Wenn ppwszDisplayNameNULL ist, wird der Standardwert aus der Registrierung abgerufen. Eine ordnungsgemäß lokalisierte Zeichenfolge muss in ppwszDisplayName angegeben werden, es werden keine Registrierungswerte verwendet.
BESCHREIBUNG Beschreibender Text, der unter dem Listenfeld angezeigt wird, wenn der Name des Handlers ausgewählt ist. Wenn ppwszDescriptionNULL ist, wird der Standardwert aus der Registrierung abgerufen. Eine ordnungsgemäß lokalisierte Zeichenfolge muss in ppwszDescription angegeben werden, es werden keine Registrierungswerte verwendet.
Schaltflächentext Text für die optionale Schaltfläche, mit der Benutzer die Benutzeroberfläche des Handlers anzeigen können. Kein Parameter verfügbar. Muss in der Registrierung angegeben werden. Eine ordnungsgemäß lokalisierte Zeichenfolge muss in ppwszBtnText angegeben werden, es werden keine Registrierungswerte verwendet.

Der pdwFlags-Parameter in beiden Initialisierungsmethoden erkennt den gleichen Satz von Flags. Zwei dieser Flags werden vom Datenträgerbereinigungs-Manager an die -Methode übergeben.

  • EVCF_SETTINGSMODE

    Wenn der Datenträgerbereinigungs-Manager nach einem Zeitplan ausgeführt wird, wird das flag EVCF_SETTINGSMODE festgelegt. Wenn dieses Flag festgelegt ist, ruft der Datenträgerbereinigungs-Manager die Methoden GetSpaceUsed, Purge oder ShowProperties nicht auf. Die Initialize - oder InitializeEx-Methode des Handlers muss alle Aufgaben verarbeiten, die normalerweise von GetSpaceUsed und Purge ausgeführt werden. Da es keine Möglichkeit für Benutzerfeedback gibt, sollten nur die Dateien berührt werden, die äußerst sicher sauber sind. Sie sollten den pcwszVolume-Parameter der Initialisierungsmethode ignorieren und nicht benötigte Dateien sauber, unabhängig davon, auf welchem Laufwerk sie sich befinden.

  • EVCF_OUTOFDISKSPACE

    Wenn das flag EVCF_OUTOFDISKSPACE festgelegt ist, ist der Speicherplatz auf dem Datenträger des Benutzers sehr knapp. Der Handler sollte beim Löschen von Dateien aggressiv vorgehen, auch wenn dies zu einem Leistungsverlust führt. Der Handler sollte jedoch offensichtlich keine Dateien löschen, die dazu führen würden, dass eine Anwendung fehlschlägt oder der Benutzer Daten verliert.

Die verbleibenden Flags werden vom Datenträgerbereinigungshandler festgelegt und an den Datenträgerbereinigungs-Manager zurückgegeben. Weitere Informationen finden Sie auf den Methodenreferenzseiten für IEmptyVolumeCache::Initialize und IEmptyVolumeCache2::InitializeEx.

  • EVCF_DONTSHOWIFZERO

    Zeigen Sie den Handler im Listenfeld des Datenträgerbereinigungs-Managers nur an, wenn der von GetSpaceUsed zurückgegebene Wert angibt, dass der Handler Speicherplatz freigeben kann.

  • EVCF_ENABLEBYDEFAULT

    Gibt an, dass der Handler standardmäßig aktiviert ist. Es wird jedes Mal ausgeführt, wenn eine Datenträgerbereinigung stattfindet, es sei denn, der Benutzer deaktiviert sie durch Deaktivieren des Kontrollkästchens in der Liste der Handler des Datenträgerbereinigungs-Managers.

  • EVCF_ENABLEBYDEFAULT_AUTO

    Gibt an, dass der Handler während geplanter Bereinigungen automatisch für die Ausführung aktiviert wird.

  • EVCF_HASSETTINGS

    Legen Sie dieses Flag fest, wenn Ihr Handler über eine anzuzeigende Benutzeroberfläche verfügt. Daraufhin zeigt der Datenträgerbereinigungs-Manager eine Schaltfläche an, wenn dieser Handler im Listenfeld ausgewählt ist. Wenn auf diese Schaltfläche geklickt wird, ruft der Datenträgerbereinigungs-Manager ShowProperties auf.

  • EVCF_REMOVEFROMLIST

    Löschen Sie den Namen des Handlers aus der Liste der verfügbaren Handler, nachdem der Handler einmal ausgeführt wurde. Die Registrierungsinformationen des Handlers werden ebenfalls gelöscht.

GetSpaceUsed

Der Datenträgerbereinigungs-Manager ruft diese Methode auf, um zu bestimmen, wie viel Speicherplatz ein Datenträgerbereinigungshandler möglicherweise freigeben kann. Der Datenträgerbereinigungs-Manager zeigt diesen Wert dann rechts neben dem Namen des Handlers im Listenfeld an. Dieser Vorgang wird für alle Handler ausgeführt, die beim Datenträgerbereinigungs-Manager registriert sind, wenn der Manager gestartet wird und bevor die Standard Ui des Managers angezeigt wird. Wenn GetSpaceUsed aufgerufen wird, sollte der Handler die Dateien überprüfen, für die er verantwortlich ist, ermitteln, welche davon Bereinigungskandidaten sind, und den Speicherplatz zurückgeben, den er freigeben kann.

Da die Überprüfung ein langwieriger Prozess sein kann, verwendet der Datenträgerbereinigungs-Manager den picb-Parameter dieser Methode, um einen Zeiger an eine IEmptyVolumeCacheCallBack-Schnittstelle zu übergeben. Der Handler verwendet die -Schnittstelle während der Überprüfung in regelmäßigen Abständen, um IEmptyVolumeCacheCallBack::ScanProgress aufzurufen, was zwei Zwecken dient.

  • Ermöglicht dem Datenträgerbereinigungs-Manager, eine Statusleiste zu aktualisieren und den Benutzer darüber zu informieren, wie die Überprüfung fortgesetzt wird.
  • Benachrichtigt den Handler, die Überprüfung zu beenden, wenn auf die Schaltfläche Abbrechen des Statusfensters geklickt wird. Dieses Schaltflächenereignis wird nicht direkt an den Handler übermittelt. Stattdessen gibt der Datenträgerbereinigungs-Manager E_ABORT zurück, wenn GetSpaceUsed das nächste Mal IEmptyVolumeCacheCallBack::ScanProgress aufruft.

Eigenschaften anzeigen

Bevor die Bereinigung gestartet wird, kann der Handler eine Benutzeroberfläche in der Regel in Form eines Windows Explorer-Fensters anzeigen, in dem der Benutzer eine Liste von Dateien oder Klassen von Dateien anzeigen kann, die vom Handler für die Bereinigung ausgewählt wurden. Wenn der Handler beim Aufrufen von Initialize oder InitializeEx das EVCF_HASSETTINGS-Flag festlegt, kann der Benutzer die Benutzeroberfläche anfordern, indem er auf die schaltfläche klickt, die zu diesem Zweck im Datenträgerbereinigungs-Manager angezeigt wird. Der Schaltflächentext variiert von Handler zu Handler, aber "Dateien anzeigen", "Seiten anzeigen" und "Optionen" sind gängige Bezeichnungen.

Wenn auf die Schaltfläche geklickt wird, ruft der Datenträgerbereinigungs-Manager ShowProperties auf, um den Handler aufzufordern, die Benutzeroberfläche anzuzeigen. Die Benutzeroberfläche sollte als untergeordnetes Element des Fensters erstellt werden, dessen Handle im hwnd-Parameter der ShowProperties-Methode übergeben wird.

Bereinigen

Der Datenträgerbereinigungs-Manager ruft die Purge-Methode des Handlers auf, um die Bereinigung in Gang zu setzen. Der picb-Parameter der Methode ist ein Zeiger auf die IEmptyVolumeCacheCallBack-Schnittstelle des Datenträgerbereinigungs-Managers. Wie bei der GetSpaceUsed-Methode sollte der Handler die Rückrufschnittstelle in regelmäßigen Abständen verwenden, um den Fortschritt zu melden und den Datenträgerbereinigungs-Manager abzufragen, ob der Benutzer auf Abbrechen geklickt hat. Beachten Sie jedoch, dass die Purge-MethodeIEmptyVolumeCacheCallBack::P urgeProgress und nicht ScanProgress aufrufen muss.

Deaktivieren

Die Deactivate-Methode wird aufgerufen, wenn der Datenträgerbereinigungs-Manager das Herunterfahren vorbereitet. Der Handler sollte alle erforderlichen Bereinigungsaufgaben ausführen und zurückgeben. Wenn der Handler nicht erneut ausgeführt werden soll, legen Sie das flag EVCF_REMOVEFROMLIST im pdwFlags-Parameter der Initialisierungsmethode fest. Wenn dieses Flag festgelegt ist, entfernt der Datenträgerbereinigungs-Manager den Handler aus seiner Liste und löscht die Registrierungseinträge des Handlers. Sie müssen die Registrierungseinträge erneut hinzufügen, um den Handler erneut auszuführen. Dieses Flag wird in der Regel für Handler verwendet, die nur einmal ausgeführt werden.

Registrieren eines Datenträgerbereinigungshandlers

Um der Liste des Datenträgerbereinigungs-Managers einen Handler hinzuzufügen, müssen der Windows-Registrierung bestimmte Schlüssel und Werte hinzugefügt werden.

Registrieren der CLSID eines Handlers

Wie bei allen COM-Objekten müssen GUID und DLL des Handlerobjekts unter dem CLSID-Schlüssel in HKEY_CLASSES_ROOT registriert werden. Sie können auch ein Symbol registrieren, das neben dem Namen des Handlers im Listenfeld des Datenträgerbereinigungs-Managers angezeigt wird. Dies ist jedoch optional. Das folgende Beispiel zeigt die beteiligten Schlüssel, Werte und Daten.

HKEY_CLASSES_ROOT
   CLSID
      Handler's GUID
         DefaultIcon
            (Default) = Handler's Icon Path, Icon Index
         InprocServer32
            (Default) = Handler's DLL path
            ThreadingModel = Apartment

Registrieren eines Handlers mit dem Datenträgerbereinigungs-Manager: Allgemein

Um die Registrierung abzuschließen, muss ein Handler einen Schlüssel hinzufügen, der seine Besonderheiten enthält, wie hier gezeigt. Im weiteren Verlauf dieses Abschnitts wird der Inhalt dieses Schlüssels erläutert.

HKEY_LOCAL_MACHINE
   Software
      Microsoft
         Windows
            CurrentVersion
               Explorer
                  VolumeCaches
                     Handler's Key

Im Allgemeinen wird der Name des Schlüssels, der die Besonderheiten eines Handlers enthält, nach dem Typ der Datei benannt, die er verarbeitet, z. B. Heruntergeladene Programme. Dies ist jedoch keine Voraussetzung. In der folgenden Tabelle sind die möglichen Werte aufgeführt, die unter diesem Schlüssel gefunden werden.

Hinweis

Nur der Standardwert, der den Klassenbezeichner (CLSID) des Handlers angibt, ist erforderlich. Alle anderen Werte sind optional.

Wert type Bedeutung
Standard REG_SZ Die CLSID des Handlers, die unter HKEY_CLASSES_ROOT\CLSID registriert ist.
AdvancedButtonText REG_SZ Text für die optionale Schaltfläche, auf die Benutzer klicken können, um die Benutzeroberfläche des Handlers anzuzeigen. Das & Zeichen kann vor einem Zeichen platziert werden, um der Schaltfläche eine Tastenkombination zuzuweisen. Der AdvancedButtonText-Wert wird von Handlern ignoriert, die IEmptyVolumeCache2::InitializeEx verfügbar machen.
CleanupString REG_SZ Befehlszeile, die eine ausführbare Datei und optionale Befehlszeilenparameter angibt. Diese Befehlszeile wird nach Abschluss der Datenträgerbereinigung ausgeführt.
CSIDL REG_DWORD Ein systemunabhängiger Bezeichner für einen speziellen Ordner, der in die Dateisuche aufgenommen werden soll. Dieser Wert muss als numerischer Wert für instance eingegeben werden, 0x0000001c und nicht als CSIDL_LOCAL_APPDATA. Eine Liste der möglichen Werte finden Sie unter CSIDL. Es kann nur ein einzelner Wert verwendet werden.
Wenn der Wert Folder angegeben wird, wird der durch den CSIDL-Wert angegebene Speicherort diesen Informationen vorangestellt, um einen Suchpfad zu erstellen. Betrachten Sie für instance das folgende Szenario.
  • Der CSIDL-Wert wird als 0x0000000d (CSIDL_MYMUSIC) angegeben.
  • Der Ordner "Meine Musik" befindet sich unter "C:\Dokumente und Einstellungen\Benutzername\Meine Musik".
  • Der Folder-Wert enthält "Jazz\Singers".
Das Ergebnis dieses Szenarios ist, dass der Datenträgerbereinigungshandler den Ordner C:\Dokumente und Einstellungen\Benutzername\Meine Musik\Jazz\Singers durchsucht. Beachten Sie, dass der Schrägstrich vor dem Wert Folder hinzugefügt wird, wenn er nicht vorhanden ist.
BESCHREIBUNG REG_SZ Beschreibender Text, der unter dem Listenfeld des Datenträgerbereinigungs-Managers angezeigt wird, wenn der Name des Handlers ausgewählt ist. Hier können Sie erklären, was der Handler tut, mit welchen Dateien er sich selbst befasst, und alle anderen Informationen, die für den Benutzer aufgeklärt werden. Wenn IEmptyVolumeCache2::InitializeEx vom Handler nicht verfügbar gemacht wird, kann dieser Text durch die IEmptyVolumeCache::Initialize-Methode des Handlers überschrieben werden, indem eine alternative Zeichenfolge im ppwszDescription-Parameter angegeben wird, wenn die Methode aufgerufen wird.
Anzeige REG_SZ Der Name des Handlers, der im Listenfeld des Datenträgerbereinigungs-Managers angezeigt werden soll. Wenn IEmptyVolumeCache2::InitializeEx vom Handler nicht verfügbar gemacht wird, kann dieser Text durch die IEmptyVolumeCache::Initialize-Methode des Handlers überschrieben werden, indem eine alternative Zeichenfolge im ppwszDisplayName-Parameter angegeben wird, wenn die Methode aufgerufen wird.
Liste REG_SZ oder REG_MULTI_SZ Eine Liste der Dateien, die durch diesen Handler gesucht und bereinigt werden. Sie können Mit dem ? oder * Zeichen. Wenn der Wert vom Typ REG_SZ ist, werden mehrere Erweiterungen mithilfe von | oder : Zeichen ohne Leerzeichen auf beiden Seiten.
Wenn das flag DDEVCF_REMOVEDIRS im Flags-Wert festgelegt ist, können diese Werte Sowohl Verzeichnisnamen als auch Dateien angeben.
Flags REG_DWORD oder REG_BINARY Kennzeichnet Elemente, die die Such- und Bereinigungsprozedur steuern. Mindestens einer der folgenden Werte:
  • DDEVCF_DOSUBDIRS (0x00000001). Rekursiv suchen und entfernen.
  • DDEVCF_REMOVEAFTERCLEAN (0x00000002). Nachdem der Handler einmal ausgeführt wurde, entfernen Sie ihn aus der Registrierung.
  • DDEVCF_REMOVEREADONLY (0x00000004). Entfernen Sie Dateien, die die Suchkriterien erfüllen, auch wenn sie schreibgeschützt sind.
  • DDEVCF_REMOVESYSTEM (0x00000008). Entfernen Sie Dateien, die die Suchkriterien erfüllen, auch wenn es sich um Systemdateien handelt.
  • DDEVCF_REMOVEHIDDEN (0x00000010). Entfernen Sie Dateien, die die Suchkriterien erfüllen, auch wenn es sich um ausgeblendete Dateien handelt.
  • DDEVCF_DONTSHOWIFZERO (0x00000020). Zeigen Sie diesen Handler nicht im Datenträgerbereinigungs-Manager an, wenn keine Dateien den Suchkriterien entsprechen.
  • DDEVCF_REMOVEDIRS (0x00000040). Passen Sie den FileList-Wert mit Verzeichnissen ab, und entfernen Sie Übereinstimmungen und alle ihre Unterverzeichnisse.
  • DDEVCF_RUNIFOUTOFDISKSPACE (0x00000080). Führen Sie diesen Handler nur aus, wenn der verfügbare Speicherplatz unter den kritischen Wert gefallen ist, der durch den Datenträgerbereinigungs-Manager bestimmt wird, der das flag EVCF_OUTOFDISKSPACE über IEmptyVolumeCache::Initialize oder IEmptyVolumeCache2::InitializeEx festlegt.
  • DDEVCF_REMOVEPARENTDIR (0x00000100). Entfernen Sie das übergeordnete Verzeichnis der angegebenen Dateien, nachdem der Cleaner ausgeführt wurde.
  • DDEVCF_PRIVATE_LASTACCESS (0x10000000). Verwenden Sie ggf. den LastAccess-Wert, um zu ermitteln, welche Dateien bereinigt werden sollen. Dieses Flag wird ignoriert, wenn dataDrivenCleaner verwendet wird, wenn jeder bereitgestellte LastAccess-Wert immer verwendet wird.
Ordner REG_SZ, REG_MULTI_SZ oder REG_EXPAND_SZ Ein bestimmter Ordner, in dem nach Elementen gesucht werden soll, die einträgen im FileList-Wert entsprechen. Sie können Mit dem ? oder * Zeichen. Wenn der Wert vom Typ REG_SZ ist, werden mehrere Ordnernamen mithilfe von | getrennt. Zeichen, ohne Leerzeichen auf beiden Seiten.
Wenn ein CSIDL-Wert vorhanden ist, kann in diesem Wert nur ein Ordner angegeben werden. Der durch den CSIDL-Wert angegebene Speicherort wird diesem Ordnerpfad vorangestellt, um einen Suchpfad zu erstellen. Ein Beispiel finden Sie in der CSIDL-Wertbeschreibung.
Wenn dieser Wert in Windows Vista Service Pack 1 (SP1) und höher nicht vorhanden ist, wird der Bereinigungshandler ignoriert und gibt bei der Initialisierung S_FALSE zurück.
Wenn dieser Wert in der ursprünglichen Version von Windows Vista und früher nicht vorhanden ist, wird der Stammordner des aktuellen Volumes verwendet. In diesem Fall wird das flag DDEVCF_DOSUBDIRS benötigt, um das gesamte Laufwerk zu durchsuchen. Ohne sie wird nur der Stammordner selbst durchsucht.
Ein Laufwerk oder Laufwerke müssen angegeben werden. Dies kann über den CSIDL-Wert oder über eine REG_EXPAND_SZ Zeichenfolge bereitgestellt werden. Wenn sie diese Optionen nicht verwenden, muss jedoch das Laufwerk für die Suche im Ordnernamen angegeben werden. Verwenden Sie ?:, um den Ordner auf dem aktuellen Laufwerk zu durchsuchen.
IconPath REG_SZ oder REG_EXPAND_SZ Der Pfad zu der Ressource, aus der ein Symbol abgerufen werden soll, das in Der Zuordnung zum Handler verwendet werden soll.
LastAccess REG_DWORD oder REG_BINARY Die Anzahl der Tage, die verstrichen sein müssen, seit zuletzt auf eine Datei zugegriffen wurde oder ein Verzeichnis erstellt wurde, damit diese Datei oder dieses Verzeichnis für die Bereinigung berücksichtigt werden kann.
Priority REG_DWORD oder REG_BINARY Bestimmt die Reihenfolge, in der der Handler in Bezug auf andere Handler ausgeführt wird. Je höher die Zahl, desto früher im Prozess, den der Handler ausführt. Es gibt keinen definierten Bereich.
Propertybag REG_SZ Die CLSID einer Ressource, die verwendet wird, um lokalisierten Text für den Anzeigenamen, die Beschreibung und den Schaltflächentext bereitzustellen. Diese Ressource ist nützlich, wenn ein Handler IEmptyVolumeCache nicht implementiert und der Handler unter Microsoft Windows NT oder Windows XP ausgeführt wird.
Der Datenträgerbereinigungs-Manager überprüft zunächst, ob die Initialisierungsroutine des Handlers diese Zeichenfolgen zurückgegeben hat, wie es bei der Implementierung von IEmptyVolumeCache2 der Fall wäre. Andernfalls wechselt der Manager als Nächstes zu einem Eigenschaftenbehälter namens in diesem Wert. Wenn keine bereitgestellt wurde, wird der Text aus der Registrierung abgerufen.
StateFlags REG_DWORD Durch Ausführen der ausführbaren Datei des Datenträgerbereinigungs-Managers Cleanmgr.exe über eine Befehlszeile können Sie Bereinigungsprofile deklarieren. Diese Profile bestehen aus einer Teilmenge der verfügbaren Handler und erhalten eine eindeutige numerische Bezeichnung. Dadurch können Sie die Ausführung verschiedener Handlersätze zu unterschiedlichen Zeiten automatisieren.
Die Befehlszeile "cleanmgr.exe /sageset:nnnn", wobei nnnn eine eindeutige numerische Bezeichnung ist, zeigt eine Benutzeroberfläche an, mit der Sie die Handler auswählen können, die in dieses Profil aufgenommen werden sollen. Neben dem Definieren des Profils schreibt der sageset-Parameter auch einen Wert mit dem Namen StateFlagsnnnn, wobei nnnn die Bezeichnung ist, die Sie im Parameter verwendet haben, in alle Unterschlüssel unter VolumeCaches. Für diese Einträge gibt es zwei mögliche Datenwerte.
  • 0: Führen Sie diesen Handler nicht aus, wenn dieses Profil ausgeführt wird.
  • 2: Schließen Sie diesen Handler ein, wenn dieses Profil ausgeführt wird.

Angenommen, die Befehlszeile "cleanmgr.exe /sageset:1234" wird ausgeführt. Auf der angezeigten Benutzeroberfläche wählt der Benutzer heruntergeladene Programme aus, wählt jedoch nicht Temporäre Internetdateien aus. Die folgenden Werte werden dann in die Registrierung geschrieben.
HKEY_LOCAL_MACHINE
   Software
      Microsoft
         Windows
            CurrentVersion
               Explorer
                  VolumeCaches
                     Downloaded Program Files
                        StateFlags1234 = 0x00000002
                     Internet Cache Files
                        StateFlags1234 = 0x00000000

Die Befehlszeile "cleanmgr.exe /sagerun:nnnn", wobei der Wert von nnnn mit der bezeichnung übereinstimmt, die mit dem sageset-Parameter deklariert wurde, führt alle in diesem Profil ausgewählten Handler aus.
Ein generischer StateFlags-Wert wird in die Registrierung geschrieben, wenn die Datenträgerbereinigung normal ausgeführt wird. Dieser Wert speichert einfach den Zustand (aktiviert oder deaktiviert) des Handlers, als er dem Benutzer zuletzt als Option angezeigt wurde. Für diese Einträge gibt es zwei mögliche Datenwerte.
  • 0: Der Handler wurde nicht ausgewählt.
  • 1: Der Handler wurde ausgewählt.

Registrieren eines Handlers mit dem Datenträgerbereinigungs-Manager: Windows 2000 oder höhere Systeme

Das Angeben von Anzeigetext in der Registrierung kann die Lokalisierung von Software erschweren. Aus diesem Grund unterstützen Windows 2000 und Windows XP die IEmptyVolumeCache2-Schnittstelle mit der bevorzugten Initialisierungsmethode InitializeEx. Unter Windows 2000 oder höher wird immer versucht, IEmptyVolumeCache2::InitializeEx vor IEmptyVolumeCache::Initialize aufzurufen. Das System verwendet Initialize nur zum Initialisieren eines Handlers, wenn IEmptyVolumeCache2 nicht verfügbar gemacht wird.

In Bezug auf die Registrierung besteht der einzige Unterschied unter Windows 2000 oder höher darin, dass Sie die Werte AdvancedButtonText, Display und Description weglassen können, wenn IEmptyVolumeCache2::InitializeEx vom Handler verfügbar gemacht wird. Diese Werte, die ordnungsgemäß lokalisierten Text enthalten, werden dem Datenträgerbereinigungs-Manager bereitgestellt, wenn InitializeEx aufgerufen wird.

Verwenden des DataDrivenCleaner-Objekts

Ein einfacher Datenträgerbereinigungshandler namens DataDrivenCleaner wird vom Betriebssystem bereitgestellt. Um dieses Objekt als Handler zu verwenden, anstatt einen eigenen zu implementieren, verwenden Sie die CLSID {C0E13E61-0CC6-11d1-BBB6-0060978B2AE6} als Standardwert für den Unterschlüssel des Handlers unter VolumeCaches , wie unter Registrieren eines Handlers mit dem Datenträgerbereinigungs-Manager: Allgemein beschrieben.

Der DataDrivenCleaner macht IEmptyVolumeCache2 nicht verfügbar, sodass die Werte Display und Description über die Registrierung bereitgestellt werden. Beachten Sie beim Deklarieren dieser Zeichenfolgen, dass dies zu Lokalisierungsproblemen führen kann. Lokalisierter Text kann über den PropertyBag-Wert bereitgestellt werden. Der AdvancedButtonText-Wert wird ignoriert, da für diesen Handler keine Benutzeroberfläche und damit keine Schaltfläche zum Anzeigen verfügbar ist.

Beispielregistrierung eines Datenträgerbereinigungshandlers

Im Folgenden finden Sie eine Beispielregistrierung für einen Datenträgerbereinigungshandler, der von The Phone Company implementiert wird. Dieser Handler implementiert sowohl IEmptyVolumeCache als auch IEmptyVolumeCache2 und stellt daher AdvancedButtonText-, Beschreibungs- und Anzeigewerte bereit, falls er auf einem Computer unter Windows 98 verwendet wird. Der Handler kombiniert die Werte CSIDL und Folder, um nach Dateien im Verzeichnis C:\Programme\The Phone Company\Temp zu suchen, und das DDEVCF_DOSUBDIRS-Flag ist festgelegt, sodass die Unterverzeichnisse ebenfalls durchsucht werden. Nur die Dateien mit den Erweiterungen .tmp und .tpc werden für die Bereinigung berücksichtigt, und das DDEVCF_PRIVATE_LASTACCESS-Flag ist festgelegt, sodass aus diesen Dateien nur diejenigen berücksichtigt werden, auf die seit mindestens 14 Tagen nicht zugegriffen wurde. Das DDEVCF_DONTSHOWIFZERO-Flag ist ebenfalls festgelegt, sodass der Handler nicht in der Liste angezeigt wird, es sei denn, er hat Bereinigungskandidaten gefunden.

HKEY_LOCAL_MACHINE
   Software
      Microsoft
         Windows
            CurrentVersion
               Explorer
                  VolumeCaches
                     The Phone Company Files
                        (Default) = {the CLSID GUID}
                        AdvancedButtonText = &View Files
                        CleanupString = c:\tpc.exe
                        CSIDL = 0x00000026
                        Description = Old temporary files.
                        Display = The Phone Company Files
                        FileList = *.tmp|*.tpc
                        Flags = 0x10000021
                        Folder = \The Phone Company\Temp
                        IconPath = c:\Program Files\The Phone Company\tpc.dll,2
                        LastAccess = 0x0000000e
                        Priority = 200
                        PropertyBag = {Property Bag CLSID GUID}