Segredos do WindowsCompartilhamento e compartilhamento semelhante

Raymond Chen

Você já se perguntou por que quando você desinstala um programa, o Windows® pergunta se ele deve excluir um arquivo que "pode impedir que outros aplicativos funcionem corretamente"? Em primeiro lugar, essa mensagem (apresentada na captura de tela) não provém do Windows, mas sim do desinstalador. A pergunta correta, portanto, é, na verdade, "Por que o desinstalador do aplicativo exibe essa caixa de diálogo"? Esse é um exemplo excelente de como fazer ao usuário uma pergunta que ele não pode responder. O que levou a essa triste ocorrência?

Para gerenciar contagens de referência para arquivos usados por mais de um aplicativo (como as bibliotecas de runtime MFC, usadas por vários programas não-relacionados), o instalador cria uma entrada sob a chave do Registro SharedDLLs. Essa entrada lista o arquivo e sua contagem de referência. Se já existe uma entrada para o arquivo, a contagem de referência será incrementada. E se a entrada ainda não existir, a contagem de referência será definida como um. Inversamente, quando o programa é desinstalado, a contagem de referência é decrementada e quando ela cai a 0, o arquivo é excluído porque não existem programas que o utilizam mais. Pelo menos essa era a teoria.

Should I delete it or not?

Should I delete it or not?  (Clique na imagem para aumentar a exibição)

Um problema sério com esse modelo é que ele supõe que todos concordam em jogar de acordo com as regras. Mas a tentação de trapacear é enorme, uma vez que as conseqüências da trapaça normalmente não penalizam o trapaceiro.

Por exemplo, digamos que exista um programa que usa as bibliotecas de runtime MFC, cujo instalador apenas copia essas bibliotecas no diretório do sistema sem atualizar a contagem de referência. Em seguida, quando esse programa é desinstalado, ele meramente exclui as bibliotecas. Agora considere o que ocorre quando esse programa tenta coexistir com um programa que segue as regras. Aqui está a mudança básica de eventos:

  1. Instalar Programa Bom: as bibliotecas são instaladas e a contagem de referência é definida como 1.
  2. Instalar Programa Ruim: as bibliotecas são instaladas, mas a contagem de referência não é alterada.
  3. Desinstalar Programa Ruim: as bibliotecas são excluídas.

O resultado desses eventos é que o Programa Ruim pára de trabalhar porque as bibliotecas não existem mais.

Veja outro cenário:

  1. Instalar Programa Bom: as bibliotecas são instaladas e a contagem de referência é definida como 1.
  2. Instalar Programa Ruim: as bibliotecas são instaladas, mas a contagem de referência não é alterada.
  3. Desinstalar Programa Bom: a contagem de referência cai a zero e as bibliotecas são excluídas.

O resultado desse cenário é que o Programa Ruim pára de funcionar.

As pessoas que escreveram o Programa Ruim descobriram: "Bem, não podemos impedir o Programa Ruim de nos enganar, mas pelo menos podemos tentar impedir que nós mesmos enganemos o Programa Ruim". Portanto, quando estiverem prestes a excluir um arquivo, elas param e exibem uma mensagem de aviso que diz: "Nossa, nossa, nossa! Estou prestes a excluir um arquivo, tudo bem? Se existir um Programa Ruim que ainda o esteja usando, o Programa Ruim será enganado. Se você possuir um Programa Ruim, deverá clicar em Não excluir". Bem, as frases não são exatamente assim, mas você sabe de que caixa de diálogo estou falando. Mesmo o lendário Jeffrey Richter recomendou essa abordagem em um artigo de 1996 do Microsoft Systems Journal.

Infelizmente, fazendo isso, o usuário receberá uma pergunta sem chance alguma de responder corretamente.

Certamente, todos esses maníacos por controle que exigem do Windows a opção de sobrescrever tudo o que fizeram por último devem estar aplaudindo essa caixa de diálogo. Os programas desinstaladores do mundo todo estão oferecendo a você controle de arquivo por arquivo sobre o processo de desinstalação. Então cuidado com aquilo que você pede — você pode conseguir.

Raymond Chenpossui um site, The Old New Thing (A velha novidade), e escreveu um livro homônimo para tratar da história do Windows e da programação Win32. Ele reflete sobre a possibilidade de a fusão nuclear se tornar viável enquanto ele estiver vivo.

© 2008 Microsoft Corporation e CMP Media, LLC. Todos os direitos reservados. A reprodução parcial ou completa sem autorização é proibida..