O que é o diretório VirtualStore no Windows?

O que é o diretório VirtualStore no Windows?

Overview

Já se deparou com uma situação esquisita onde sua aplicação parece ter vida própria, conectando-se a diferentes bancos de dados dependendo do usuário? Antes de pensar em possessões digitais, dê uma olhada nessa narrativa fascinante. Descubra como os segredos do Windows e seu diretório VirtualStore mexeram com um dia típico de trabalho, e, mais importante, aprenda a evitar que esse fenômeno ocorra com você. Tudo explicado de maneira leve, mas com a seriedade que a TI demanda.

Em um dia normal de trabalho, uma aplicação estava se conectando a um banco de dados quando eu a executava e a outro banco de dados quando outro usuário executava o programa. O banco correto estava em um arquivo, localizado no mesmo diretório do executável. O que estava acontecendo? O Capiroto tomou conta da aplicação?

Não… era só o Windows sendo Windows. Monitorando o ambiente, descobri que o arquivo de configuração que estava sendo carregado não estava no caminho onde estava a aplicação, mas em outro diretório, estava no VirtualStore.

Imagine que a aplicação está instalada no diretório C:\Program Files (x86)\RaccoonNinja e esta aplicação precisa escrever no arquivo settings.config.

Por razões de segurança, o Windows não permite que qualquer um escreva nas subpastas do c:\Program Files (x86)\ e quando uma aplicação tenta fazer isso, ele redireciona a ação para um diretório VirtualStore, que funciona como uma espécie de Sandbox.

Foi isso que aconteceu com a aplicação que estava executando. Quando o outro usuário executou o programa, o arquivo de configuração estava apontando para o banco A e quando eu tentei, o arquivo estava apontando para o banco B. O outro usuário abria o arquivo de configuração e notava que a aplicação deveria conectar ao banco B mas, para ele, estava sempre indo para o banco A.

Neste caso específico, o diretório do tipo VirtualStore estava localizado na pasta C:\Users\username\AppData\Local\VirtualStore\Program Files (x86)\RaccoonNinja

Como evitar que estes diretórios sejam criados? Simples, você tem duas opções:

  • Executar a aplicação como Administrador
  • Instalar a aplicação em um diretório que todos tenham acesso;

Versão tl;dr: Estes diretórios são criados quando o usuário que está rodando a aplicação não tem permissão para escrever na pasta onde está o software. Eles ficam em um subdiretório C:\Users\username\AppData\Local\VirtualStore\.

Para evitar que eles sejam criados, deve-se executar a aplicação como Administrador ou move-la para uma pasta pública.