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.