O que é o diretório VirtualStore no Windows?

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.

The following two tabs change content below.
Arquiteto de Software e Desenvolvedor Backend (quase Fullstack), geralmente trabalho com C#, PowerShell, Python, Golang, bash e Unity (esse é mais por hobby). Estou sempre buscando algo novo para aprender, adicionando novas ferramentas ao meu cinto de utilidades.
Posted in Conhecimento Técnico, Dev and tagged , , , , .