Criando um manipulador de limpeza de disco

Um axioma comprovado várias vezes no mundo dos computadores é que, independentemente do tamanho da capacidade de armazenamento do computador, você eventualmente o preencherá. Embora o tamanho médio do disco rígido de um computador tenha aumentado drasticamente ao longo do tempo, os aplicativos também cresceram adequadamente, deixando os usuários procurando maneiras de criar mais espaço livre em disco rígido. O espaço disponível também é reduzido pelos muitos arquivos temporários que os aplicativos criam por motivos de backup ou desempenho. Quando o espaço em disco fica baixo, torna-se necessário reduzir a quantidade de espaço usada pelos aplicativos. O espaço em disco pode ser liberado usando uma variedade de meios, incluindo o seguinte:

  • Excluindo arquivos.
  • Compactando arquivos.
  • Movendo arquivos para um meio de backup.
  • Transferindo arquivos para um servidor remoto.

Os arquivos que são bons candidatos à limpeza incluem:

  • Arquivos que o usuário nunca mais precisará.
  • Arquivos temporários que existem apenas por motivos de desempenho.
  • Arquivos que podem ser restaurados, se necessário, de um CD de instalação.
  • Arquivos de dados que possivelmente foram substituídos por versões mais recentes, como arquivos de backup antigos.
  • Arquivos mais antigos que não são usados há muito tempo.

A exclusão é particularmente apropriada para arquivos que o usuário nunca mais precisará, por exemplo, arquivos que são temporariamente armazenados em cache por motivos de desempenho. A exclusão também é apropriada para arquivos que são facilmente restaurados, como arquivos gráficos que podem ser recarregados de um CD de instalação. Arquivos que o usuário pode precisar mais tarde ou que seriam difíceis de reconstruir são melhores candidatos para compactação ou backup.

Esperar que um usuário limpo manualmente o sistema de arquivos não é uma boa solução. O usuário pode não saber onde muitos dos arquivos estão localizados ou como reconhecer quais podem ser removidos com segurança. Além disso, há o risco de o usuário excluir arquivos essenciais.

As seguintes facetas do utilitário de Limpeza de Disco são discutidas neste tópico.

O Utilitário de Limpeza de Disco do Windows

A partir do Windows 98, o sistema operacional Windows inclui a Limpeza de Disco, um utilitário que torna muito mais fácil para o usuário gerenciar o espaço em disco rígido disponível. O utilitário de Limpeza de Disco foi projetado para liberar o máximo de espaço em disco possível e diminuir o risco de que o usuário exclua arquivos essenciais acidentalmente.

A limpeza de disco pode ser iniciada de três maneiras.

  • O usuário pode iniciar a limpeza de disco clicando em Iniciar; apontando para Todos os Programas, Acessórios e Ferramentas do Sistema; e, em seguida, clicando em Limpeza de Disco.
  • O sistema notifica o usuário com uma caixa de mensagem informando que o espaço em disco não utilizado atingiu o modo crítico. O limite de modo crítico para uma unidade maior que 2,25 gigabytes (GB) é de 200 megabytes (MB). Os avisos subsequentes são dados em 80, 50 e 1 MB. O usuário recebe a opção de liberar espaço em disco manualmente ou iniciar o utilitário de Limpeza de Disco.
  • O usuário pode fazer com que o Assistente de Tarefa Agendada do Windows (conhecido como Assistente de Manutenção em sistemas mais antigos) execute o utilitário de Limpeza de Disco automaticamente em horários agendados.

O desafio básico inerente à limpeza de disco é liberar o máximo de espaço em disco possível sem excluir arquivos essenciais. Como não há uma maneira padrão de marcar arquivos para limpeza, nenhum aplicativo pode detectar e limpo todos os arquivos unessential de forma confiável. O utilitário de Limpeza de Disco resolve esse problema dividindo a operação de limpeza entre um único gerenciador de limpeza de disco e uma coleção de manipuladores de limpeza de disco.

Quando o utilitário de Limpeza de Disco é executado, o usuário vê a caixa de diálogo a seguir. (Se houver mais de uma partição de disco ou disco no computador, o usuário será solicitado primeiro a escolher uma unidade antes que essa caixa de diálogo seja exibida.)

captura de tela da caixa de diálogo limpo para cima

O gerenciador de limpeza de disco faz parte do sistema operacional. Ele exibe a caixa de diálogo mostrada na ilustração anterior, manipula a entrada do usuário e gerencia a operação de limpeza. A seleção real e a limpeza de arquivos desnecessários são feitas pelos manipuladores individuais de limpeza de disco mostrados na caixa de listagem do gerenciador de limpeza de disco. O usuário tem a opção de habilitar ou desabilitar manipuladores individuais selecionando ou desmarcando sua caixa de marcar na interface do usuário do gerenciador de limpeza de disco.

Cada manipulador é responsável por um conjunto bem definido de arquivos. Por exemplo, o manipulador selecionado na ilustração é responsável por limpar arquivos de programa baixados. O manipulador selecionado na ilustração também fornece um botão Exibir Arquivos . Ao clicar no botão, o usuário pode solicitar que o manipulador exiba uma interface do usuário normalmente uma janela do Windows Explorer que permite que o usuário especifique quais arquivos ou classes de arquivos limpo.

Embora o Windows venha com vários manipuladores de limpeza de disco, eles não foram projetados para lidar com arquivos produzidos por outros aplicativos. Em vez disso, o gerenciador de limpeza de disco foi projetado para ser flexível e extensível, permitindo que qualquer desenvolvedor implemente e registre seu próprio manipulador de limpeza de disco. Qualquer desenvolvedor pode estender os serviços de limpeza de disco disponíveis implementando e registrando um manipulador de limpeza de disco.

Todos os aplicativos que produzem arquivos temporários podem e devem implementar e registrar um manipulador de limpeza de disco. Isso fornece aos usuários uma maneira conveniente e confiável de gerenciar os arquivos temporários do aplicativo. Ao implementar o manipulador, você pode decidir quais arquivos são afetados e determinar como a limpeza real acontece.

Noções básicas de implementação

Manipuladores de limpeza são objetos COM (Component Object Model) do servidor em processo. O Windows fornece um objeto manipulador existente chamado DataDrivenCleaner para seu uso. Você também pode optar por implementar um manipulador por conta própria para obter mais flexibilidade. Esses objetos permitem que você especifique como selecionar arquivos, liberar espaço em disco e, no caso de um manipulador implementado, exibir a interface do usuário opcional para um controle mais granular. Esta seção aborda a questão de implementar seu próprio manipulador. Para obter detalhes sobre o uso do objeto DataDrivenCleaner, consulte Usando o objeto DataDrivenCleaner.

Um manipulador de limpeza de disco deve executar essas cinco tarefas básicas.

  • Inicialize o objeto do manipulador.
  • Examine o disco para determinar quanto espaço em disco pode ser liberado.
  • Exiba a interface do usuário para obter comentários do usuário sobre quais arquivos limpo. (Opcional)
  • Faça a limpeza.
  • Desligar.

Para permitir que o gerenciador de limpeza de disco gerencie essas tarefas, um manipulador deve exportar IEmptyVolumeCache para Windows 98 ou IEmptyVolumeCache2 para Windows Millennium Edition (Windows Me), Windows 2000 e Windows XP. Como IEmptyVolumeCache2 herda de IEmptyVolumeCache, adicionando apenas o método adicional InitializeEx, relativamente pouco trabalho extra é necessário para implementar ambos. A menos que o manipulador se destine a apenas um desses sistemas operacionais, ele deve exportar ambas as interfaces.

Para exportar essas interfaces, você deve implementar esses métodos correspondentes às cinco tarefas básicas.

Initialize/InitializeEx

Os dois métodos de inicialização, que são bastante semelhantes, são chamados quando o utilitário de Limpeza de Disco é executado. O gerenciador de limpeza de disco do Windows 98 chama o método IEmptyVolumeCache::Initialize de um manipulador. No entanto, o Gerenciador de limpeza de disco do Windows Millennium Edition (Windows Me), Windows 2000 ou Windows XP tenta chamar IEmptyVolumeCache2::InitializeEx e usa apenas IEmptyVolumeCache::Initialize se IEmptyVolumeCache2 não for exposto pelo manipulador. O gerenciador de limpeza de disco passa informações para o método , como a chave do Registro do manipulador e o volume de disco que deve ser limpo.

Qualquer um dos métodos pode retornar várias cadeias de caracteres de exibição e definir um ou mais sinalizadores. A principal diferença entre os dois métodos é como o texto exibido no gerenciador de limpeza de disco é tratado. As três cadeias de caracteres a seguir são afetadas.

String Finalidade Initialize InitializeEx
Nome de exibição O nome do manipulador exibido na caixa de listagem do gerenciador de limpeza de disco. Se ppwszDisplayName for NULL, o valor padrão será recuperado do registro. Uma cadeia de caracteres localizada corretamente deve ser especificada em ppwszDisplayName , nenhum valor do Registro é usado.
Descrição Texto descritivo exibido abaixo da caixa de listagem quando o nome do manipulador é selecionado. Se ppwszDescription for NULL, o valor padrão será recuperado do registro. Uma cadeia de caracteres localizada corretamente deve ser especificada em ppwszDescription , nenhum valor do Registro é usado.
Texto do botão Texto para o botão opcional que permite que os usuários exibam a interface do usuário do manipulador. Nenhum parâmetro disponível. Deve ser especificado no registro. Uma cadeia de caracteres localizada corretamente deve ser especificada em ppwszBtnText nenhum valor de registro é usado.

O parâmetro pdwFlags encontrado em ambos os métodos de inicialização reconhece o mesmo conjunto de sinalizadores. Dois desses sinalizadores são passados para o método pelo gerenciador de limpeza de disco.

  • EVCF_SETTINGSMODE

    Se o gerenciador de limpeza de disco estiver sendo executado em um agendamento, ele definirá o sinalizador EVCF_SETTINGSMODE . Se esse sinalizador estiver definido, o gerenciador de limpeza de disco não chamará os métodos GetSpaceUsed, Purge ou ShowProperties . O método Initialize ou InitializeEx do manipulador deve lidar com todas as tarefas normalmente executadas por GetSpaceUsed e Purge. Como não há nenhuma oportunidade para comentários do usuário, somente os arquivos extremamente seguros para limpo devem ser tocados. Você deve ignorar o parâmetro pcwszVolume do método de inicialização e limpo arquivos desnecessários, independentemente da unidade em que eles estão.

  • EVCF_OUTOFDISKSPACE

    Se o sinalizador EVCF_OUTOFDISKSPACE estiver definido, a unidade de disco do usuário estará extremamente sem espaço. O manipulador deve ser agressivo quanto à exclusão de arquivos, mesmo que resulte em uma perda de desempenho. No entanto, o manipulador obviamente não deve excluir arquivos que fariam com que um aplicativo falhasse ou o usuário perdesse dados.

Os sinalizadores restantes são definidos pelo manipulador de limpeza de disco e retornados ao gerenciador de limpeza de disco. Para obter mais informações, consulte as páginas de referência do método para IEmptyVolumeCache::Initialize e IEmptyVolumeCache2::InitializeEx.

  • EVCF_DONTSHOWIFZERO

    Exiba o manipulador na caixa de listagem do gerenciador de limpeza de disco somente se o valor retornado por GetSpaceUsed indicar que o manipulador pode liberar espaço em disco.

  • EVCF_ENABLEBYDEFAULT

    Especifica que o manipulador está habilitado por padrão. Ele será executado sempre que uma limpeza de disco ocorrer, a menos que o usuário a desabilite limpando sua caixa de marcar na lista de manipuladores do gerenciador de limpeza de disco.

  • EVCF_ENABLEBYDEFAULT_AUTO

    Especifica que o manipulador está habilitado automaticamente para ser executado durante as limpezas agendadas.

  • EVCF_HASSETTINGS

    Defina esse sinalizador se o manipulador tiver uma interface do usuário a ser exibida. Em resposta, o gerenciador de limpeza de disco exibe um botão quando esse manipulador é selecionado na caixa de listagem. Se esse botão for clicado, o gerenciador de limpeza de disco chamará ShowProperties.

  • EVCF_REMOVEFROMLIST

    Exclua o nome do manipulador da lista de manipuladores disponíveis depois que o manipulador tiver sido executado uma vez. As informações do registro do manipulador também são excluídas.

GetSpaceUsed

O gerenciador de limpeza de disco chama esse método para determinar quanto espaço um manipulador de limpeza de disco pode liberar. Em seguida, o gerenciador de limpeza de disco exibe esse valor à direita do nome do manipulador na caixa de listagem. Essa operação é executada em todos os manipuladores registrados com o gerenciador de limpeza de disco quando o gerenciador é iniciado e antes da interface do usuário main do gerenciador ser exibida. Quando GetSpaceUsed é chamado, o manipulador deve examinar os arquivos pelos quais ele é responsável, determinar quais deles são candidatos à limpeza e retornar a quantidade de espaço em disco que ele pode liberar.

Como a verificação pode ser um processo longo, o gerenciador de limpeza de disco usa o parâmetro picb desse método para passar um ponteiro para uma interface IEmptyVolumeCacheCallBack . O manipulador usa a interface periodicamente durante a verificação para chamar IEmptyVolumeCacheCallBack::ScanProgress, que atende a duas finalidades.

  • Permite que o gerenciador de limpeza de disco atualize uma barra de progresso, informando ao usuário como a verificação está progredindo.
  • Notifica o manipulador para interromper a verificação caso o botão Cancelar da janela de progresso seja clicado. Esse evento de botão não é comunicado diretamente ao manipulador; em vez disso, o gerenciador de limpeza de disco retorna E_ABORT da próxima vez que GetSpaceUsed chamar IEmptyVolumeCacheCallBack::ScanProgress.

ShowProperties

Antes de iniciar a limpeza, o manipulador pode exibir uma interface do usuário normalmente na forma de uma janela do Windows Explorer que permite que o usuário veja uma lista de arquivos ou classes de arquivos selecionados para limpeza pelo manipulador. Se o manipulador definir o sinalizador EVCF_HASSETTINGS quando Initialize ou InitializeEx for chamado, o usuário poderá solicitar a interface do usuário clicando no botão exibido para essa finalidade no gerenciador de limpeza de disco. O texto do botão varia de manipulador para manipulador, mas "Exibir Arquivos", "Exibir Páginas" e "Opções" são rótulos comuns.

Quando o botão é clicado, o gerenciador de limpeza de disco chama ShowProperties para solicitar que o manipulador exiba a interface do usuário. A interface do usuário deve ser criada como um filho da janela cujo identificador é passado no parâmetro hwnd do método ShowProperties.

Limpar

O gerenciador de limpeza de disco chama o método Purge do manipulador para definir a limpeza em movimento. O parâmetro picb do método é um ponteiro para a interface IEmptyVolumeCacheCallBack do gerenciador de limpeza de disco. Assim como acontece com o método GetSpaceUsed , o manipulador deve usar a interface de retorno de chamada periodicamente para relatar seu progresso e consultar o gerenciador de limpeza de disco se o usuário clicou em Cancelar. No entanto, observe que o método Purge deve chamar IEmptyVolumeCacheCallBack::P urgeProgress, não ScanProgress.

Desativar

O método Deactivate é chamado quando o gerenciador de limpeza de disco está se preparando para desligar. O manipulador deve executar as tarefas de limpeza necessárias e retornar. Se você não quiser que o manipulador seja executado novamente, defina o sinalizador EVCF_REMOVEFROMLIST no parâmetro pdwFlags do método de inicialização. Se esse sinalizador for definido, o gerenciador de limpeza de disco removerá o manipulador de sua lista e excluirá as entradas do registro do manipulador. Você deve adicionar novamente as entradas do Registro para executar o manipulador novamente. Normalmente, esse sinalizador é usado para manipuladores executados apenas uma vez.

Registrando um manipulador de limpeza de disco

Para adicionar um manipulador à lista do gerenciador de limpeza de disco, determinadas chaves e valores devem ser adicionados ao Registro do Windows.

Registrando o CLSID de um manipulador

Assim como acontece com todos os objetos COM, o GUID e a DLL do objeto manipulador devem ser registrados sob a chave CLSID no HKEY_CLASSES_ROOT. Você também pode registrar um ícone exibido ao lado do nome do manipulador na caixa de listagem do gerenciador de limpeza de disco, mas isso é opcional. O exemplo a seguir mostra as chaves, os valores e os dados envolvidos.

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

Registrando um manipulador com o Gerenciador de Limpeza de Disco: Geral

Para concluir o registro, um manipulador deve adicionar uma chave que contém suas especificidades, conforme mostrado aqui. O restante desta seção discute o conteúdo dessa chave.

HKEY_LOCAL_MACHINE
   Software
      Microsoft
         Windows
            CurrentVersion
               Explorer
                  VolumeCaches
                     Handler's Key

Em geral, o nome da chave que contém as particularidades de um manipulador é nomeado para o tipo de arquivo que ele manipula, como Arquivos de Programas Baixados, mas isso não é um requisito. A tabela a seguir detalha os possíveis valores encontrados sob essa chave.

Observação

Somente o valor Padrão que especifica o CLSID (identificador de classe) do manipulador é necessário, todos os outros valores são opcionais.

Valor Type Significado
Padrão REG_SZ O CLSID do manipulador conforme registrado em HKEY_CLASSES_ROOT\CLSID.
AdvancedButtonText REG_SZ Texto para o botão opcional em que os usuários podem clicar para exibir a interface do usuário do manipulador. O caractere & pode ser colocado antes de um caractere para atribuir um atalho de teclado para o botão. O valor AdvancedButtonText é ignorado por manipuladores que expõem IEmptyVolumeCache2::InitializeEx.
CleanupString REG_SZ Linha de comando especificando um arquivo executável e parâmetros de linha de comando opcionais. Essa linha de comando é executada na conclusão da limpeza de disco.
CSIDL REG_DWORD Um identificador independente do sistema para uma pasta especial a ser incluída na pesquisa de arquivos. Esse valor deve ser inserido como um valor numérico, por exemplo, 0x0000001c em vez de CSIDL_LOCAL_APPDATA. Para obter uma lista de valores possíveis, consulte CSIDL. Somente um único valor pode ser usado.
Se o valor folder for especificado, o local indicado pelo valor CSIDL será anexado a essas informações para compor um caminho de pesquisa. Por exemplo, considere o cenário a seguir.
  • O valor CSIDL é especificado como 0x0000000d (CSIDL_MYMUSIC)
  • Sua pasta Minhas Músicas está localizada em C:\Documents and Settings\username\My Music
  • O valor folder contém "Jazz\Singers"
O resultado desse cenário é que o manipulador de limpeza de disco pesquisa a pasta C:\Documents and Settings\username\My Music\Jazz\Singers. Observe que a barra que precede o valor folder será adicionada se não estiver presente.
Descrição REG_SZ Texto descritivo exibido abaixo da caixa de listagem do gerenciador de limpeza de disco quando o nome do manipulador é selecionado. Aqui você pode explicar o que o manipulador faz, com quais arquivos ele se preocupa e qualquer outra informação elucidatória para o usuário. Se IEmptyVolumeCache2::InitializeEx não for exposto pelo manipulador, esse texto poderá ser substituído por meio do método IEmptyVolumeCache::Initialize do manipulador especificando uma cadeia de caracteres alternativa no parâmetro ppwszDescription quando o método é chamado.
Exibir REG_SZ O nome do manipulador a ser exibido na caixa de listagem do gerenciador de limpeza de disco. Se IEmptyVolumeCache2::InitializeEx não for exposto pelo manipulador, esse texto poderá ser substituído por meio do método IEmptyVolumeCache::Initialize do manipulador especificando uma cadeia de caracteres alternativa no parâmetro ppwszDisplayName quando o método é chamado.
Filelist REG_SZ ou REG_MULTI_SZ Uma lista de arquivos pesquisados e limpos por esse manipulador. Você pode especificar caracteres curinga usando o ? ou * caracteres. Se o valor for do tipo REG_SZ, várias extensões serão separadas usando o | ou : caracteres, sem espaços em nenhum dos lados.
Se o sinalizador DDEVCF_REMOVEDIRS estiver definido no valor Flags, esses valores poderão especificar nomes de diretório, bem como arquivos.
Flags REG_DWORD ou REG_BINARY Sinaliza elementos de controle do procedimento de pesquisa e limpeza. Um ou mais dos valores a seguir.
  • DDEVCF_DOSUBDIRS (0x00000001). Pesquise e remova recursivamente.
  • DDEVCF_REMOVEAFTERCLEAN (0x00000002). Depois que o manipulador for executado uma vez, remova-o do registro.
  • DDEVCF_REMOVEREADONLY (0x00000004). Remova arquivos que atendam aos critérios de pesquisa mesmo que sejam somente leitura.
  • DDEVCF_REMOVESYSTEM (0x00000008). Remova arquivos que atendam aos critérios de pesquisa mesmo que sejam arquivos do sistema.
  • DDEVCF_REMOVEHIDDEN (0x00000010). Remova arquivos que atendam aos critérios de pesquisa mesmo que sejam arquivos ocultos.
  • DDEVCF_DONTSHOWIFZERO (0x00000020). Não exiba esse manipulador no gerenciador de limpeza de disco se nenhum arquivo corresponder aos critérios de pesquisa.
  • DDEVCF_REMOVEDIRS (0x00000040). Corresponda o valor FileList com diretórios e remova correspondências e todos os seus subdiretórios.
  • DDEVCF_RUNIFOUTOFDISKSPACE (0x00000080). Execute esse manipulador somente se o espaço em disco disponível estiver abaixo do valor crítico, determinado pelo gerenciador de limpeza de disco definindo o sinalizador EVCF_OUTOFDISKSPACE por meio de IEmptyVolumeCache::Initialize ou IEmptyVolumeCache2::InitializeEx.
  • DDEVCF_REMOVEPARENTDIR (0x00000100). Remova o diretório pai dos arquivos especificados depois que o limpador for executado.
  • DDEVCF_PRIVATE_LASTACCESS (0x10000000). Use o valor LastAccess, se fornecido, para verificar quais arquivos devem ser limpos. Esse sinalizador é ignorado ao usar o DataDrivenCleaner qualquer valor LastAccess fornecido é sempre usado.
Pasta REG_SZ, REG_MULTI_SZ ou REG_EXPAND_SZ Uma pasta ou pastas específicas para pesquisar itens correspondentes a entradas no valor FileList. Você pode especificar caracteres curinga usando o ? ou * caracteres. Se o valor for do tipo REG_SZ, vários nomes de pasta serão separados usando o | caractere, sem espaços em ambos os lados.
Se um valor CSIDL estiver presente, somente uma pasta poderá ser especificada nesse valor. O local indicado pelo valor CSIDL é anexado a esse caminho de pasta para compor um caminho de pesquisa. Para obter um exemplo, consulte a descrição do valor csidl.
Se esse valor estiver ausente no Windows Vista Service Pack 1 (SP1) e posterior, o manipulador de limpeza será ignorado e retornará S_FALSE na inicialização.
Se esse valor estiver ausente na versão original do Windows Vista e anterior, a pasta raiz do volume atual será usada. O sinalizador DDEVCF_DOSUBDIRS é necessário nesse caso para pesquisar toda a unidade. Sem ela, somente a pasta raiz em si é pesquisada.
Uma unidade ou unidades deve ser especificada. Isso pode ser fornecido por meio do valor CSIDL ou por meio de uma cadeia de caracteres REG_EXPAND_SZ. No entanto, sem essas opções, a unidade a ser pesquisada deve ser especificada no nome da pasta. Use ?: para pesquisar a pasta na unidade atual.
IconPath REG_SZ ou REG_EXPAND_SZ O caminho para o recurso do qual obter um ícone a ser usado em associação com o manipulador.
Lastaccess REG_DWORD ou REG_BINARY O número de dias que devem ter decorrido desde que um arquivo foi acessado pela última vez ou um diretório foi criado para que esse arquivo ou diretório seja considerado para limpeza.
Prioridade REG_DWORD ou REG_BINARY Determina a ordem em que o manipulador é executado em relação a outros manipuladores. Quanto maior o número, mais cedo no processo em que o manipulador é executado. Nenhum intervalo definido é aceitável.
Propertybag REG_SZ O CLSID de um recurso usado para fornecer texto localizado para o nome de exibição, a descrição e o texto do botão. Esse recurso é útil na situação em que um manipulador não implementa IEmptyVolumeCache e o manipulador está sendo executado no Microsoft Windows NT ou no Windows XP.
O gerenciador de limpeza de disco primeiro verifica se a rotina de inicialização do manipulador retornou essas cadeias de caracteres, como seria o caso quando IEmptyVolumeCache2 é implementado. Caso contrário, o gerenciador volta-se para um recipiente de propriedades chamado nesse valor. Se nenhum tiver sido fornecido, ele recuperará o texto do registro.
StateFlags REG_DWORD Ao executar o arquivo executável do gerenciador de limpeza de disco Cleanmgr.exe de uma linha de comando, você pode declarar perfis de limpeza. Esses perfis são compostos por um subconjunto dos manipuladores disponíveis e recebem um rótulo numérico exclusivo. Isso permite automatizar a execução de diferentes conjuntos de manipuladores em momentos diferentes.
A linha de comando "cleanmgr.exe /sageset:nnnn", em que nnnn é um rótulo numérico exclusivo, exibe uma interface do usuário, permitindo que você escolha os manipuladores a serem incluídos nesse perfil. Além de definir o perfil, o parâmetro sageset também grava um valor chamado StateFlagsnnnn, em que nnnn é o rótulo usado no parâmetro , em todas as subchaves em VolumeCaches. Há dois valores de dados possíveis para essas entradas.
  • 0: não execute esse manipulador quando esse perfil for executado.
  • 2: inclua esse manipulador quando esse perfil for executado.

Por exemplo, suponha que a linha de comando "cleanmgr.exe /sageset:1234" seja executada. Na interface do usuário apresentada, o usuário escolhe Arquivos de Programas Baixados, mas não escolhe Arquivos de Internet Temporários. Os valores a seguir são gravados no registro.
HKEY_LOCAL_MACHINE
   Software
      Microsoft
         Windows
            CurrentVersion
               Explorer
                  VolumeCaches
                     Downloaded Program Files
                        StateFlags1234 = 0x00000002
                     Internet Cache Files
                        StateFlags1234 = 0x00000000

A linha de comando "cleanmgr.exe /sagerun:nnnn", em que o valor de nnnn corresponde ao rótulo declarado com o parâmetro sageset, executa todos os manipuladores selecionados nesse perfil.
Um valor stateFlags genérico é gravado no registro quando a Limpeza de Disco é executada normalmente. Esse valor simplesmente armazena o estado (marcado ou desmarcado) do manipulador na última vez em que foi apresentado como uma opção para o usuário. Há dois valores de dados possíveis para essas entradas.
  • 0: o manipulador não foi selecionado.
  • 1: o manipulador foi selecionado.

Registrando um manipulador com o Gerenciador de Limpeza de Disco: Sistemas Windows 2000 ou Posteriores

Especificar texto de exibição no registro pode dificultar a localização do software. Por esse motivo, o Windows 2000 e o Windows XP dão suporte à interface IEmptyVolumeCache2 com seu método de inicialização preferencial InitializeEx. No Windows 2000 ou posterior, sempre é feita uma tentativa de chamar IEmptyVolumeCache2::InitializeEx antes de IEmptyVolumeCache::Initialize. O sistema só usará Initialize para inicializar um manipulador se IEmptyVolumeCache2 não estiver exposto.

Em relação ao registro, a única diferença no Windows 2000 ou posterior é que você pode omitir os valores AdvancedButtonText, Display e Description quando IEmptyVolumeCache2::InitializeEx é exposto pelo manipulador. Esses valores, contendo texto localizado corretamente, são fornecidos ao gerenciador de limpeza de disco quando ele chama InitializeEx.

Usando o objeto DataDrivenCleaner

Um manipulador de limpeza de disco básico, chamado DataDrivenCleaner, é fornecido pelo sistema operacional. Para usar esse objeto como um manipulador em vez de implementar o seu próprio, use o CLSID {C0E13E61-0CC6-11d1-BBB6-0060978B2AE6} como o valor Padrão para a subchave do manipulador em VolumeCaches , conforme descrito em Registrando um manipulador com o Gerenciador de Limpeza de Disco: Geral.

O DataDrivenCleaner não expõe IEmptyVolumeCache2, portanto, os valores de Exibição e Descrição são fornecidos por meio do Registro. Ao declarar essas cadeias de caracteres, lembre-se de que isso pode causar problemas de localização. O texto localizado pode ser fornecido por meio do valor PropertyBag. O valor AdvancedButtonText é ignorado, pois nenhuma interface do usuário e, portanto, nenhum botão para exibi-lo, está disponível para esse manipulador.

Exemplo de registro de um manipulador de limpeza de disco

Veja a seguir um exemplo de registro para um manipulador de limpeza de disco implementado pela Empresa de Telefonia. Esse manipulador implementa os valores IEmptyVolumeCache e IEmptyVolumeCache2 e, portanto, fornece valores AdvancedButtonText, Description e Display caso seja usado em um computador que executa o Windows 98. O manipulador combina os valores CSIDL e Folder para pesquisar arquivos no diretório C:\Program Files\The Phone Company\Temp e o sinalizador DDEVCF_DOSUBDIRS é definido para que seus subdiretórios também sejam pesquisados. Somente os arquivos com extensões .tmp e .tpc são considerados para limpeza e o sinalizador DDEVCF_PRIVATE_LASTACCESS é definido para que, fora desses arquivos, somente aqueles que não foram acessados por 14 dias ou mais sejam considerados. O sinalizador DDEVCF_DONTSHOWIFZERO também é definido para que o manipulador não apareça na lista, a menos que tenha encontrado candidatos de limpeza.

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}